Sepehr Taghdisian avatar Sepehr Taghdisian committed f4324e8

small performance improvement in GL, fixed GL ssao

Comments (0)

Files changed (15)

bin/test.cfg.json

         "texture-quality": "highest",
         "texture-filter": "aniso4x",
         "shading-quality": "high",
-        "hw-version": "0",
+        "hw-version": "",
         "adapter-id": 0,
         "width": 1280,
         "height": 720,
     },
     "console": [
         "showfps",
-        "showft"
+        "showft",
+        "showgraph ft"
     ]
 }

data/shaders/glsl/ssao.ps.glsl

 
     for (int i = 0; i < _PASSCNT_; i++)  {
         coord1 = reflect(g_kernel[i], rand)*radius;
-        coord2 = vec2(dot(coord1, g_value1), dot(coord2, g_value2));
+        /* coord2 = vec2(dot(coord1, g_value1), dot(coord2, g_value2)); */
 
         ao += calc_ao(vso_coord, coord1*0.25f, occludee_pos, occludee_norm);
-        ao += calc_ao(vso_coord, coord2*0.5f, occludee_pos, occludee_norm);
+        ao += calc_ao(vso_coord, coord1*0.5f, occludee_pos, occludee_norm);
         ao += calc_ao(vso_coord, coord1*0.75f, occludee_pos, occludee_norm);
-        ao += calc_ao(vso_coord, coord2, occludee_pos, occludee_norm);
+        ao += calc_ao(vso_coord, coord1, occludee_pos, occludee_norm);
     }
 
     ao = 1 - ao/(_PASSCNT_*4);

include/core/array.h

  * recommended method is to check to array expansion before adding new items\n
  * example: if (arr_needexpand(a))  arr_expand(a)\n
  *          a.buffer[a.item_cnt++] = item
- * @see arr_needexpand  @see arr_create @ingroup array
+ * @see arr_needexpand  
+ * @see arr_create 
+ * @ingroup array
  */ 
 CORE_API result_t arr_expand(struct array* arr);
 
 
 /**
  * checks if array needs expansion
- * @see arr_expand   @ingroup array
+ * @see arr_expand   
+ * @ingroup array
  */
 INLINE bool_t arr_needexpand(const struct array* arr)
 {

include/engine/gfx-shader.h

 	gfx_buffer gpu_buffer;
 	uint8* cpu_buffer;
 	uint32 buffer_size;
+    uint32 end_offset;  /* maximum offset that gpu update should apply (normally equals buffer_size) */
 	struct allocator* alloc;
 };
 
     uint32 cnt);
 void gfx_cb_set3ui(struct gfx_cblock* cb, uint32 name_hash, const uint32* nv);
 
+/* sets end offset for cb, some CBs like texture buffers may need end offset for more optimized maps */
+void gfx_cb_set_endoffset(struct gfx_cblock* cb, uint32 offset);
+
 /* default uniforms/slow mode */
 bool_t gfx_shader_isvalidtex(struct gfx_shader* shader, uint32 name_hash);
 bool_t gfx_shader_isvalid(struct gfx_shader* shader, uint32 name_hash);

include/engine/init-params.h

     GFX_HWVER_D3D11_0 = 3,  /**< uses D3D11 graphics capabilities for current gpu (must be _D3D_ build) */
     GFX_HWVER_D3D10_1 = 2,  /**< uses D3D10.1 graphics capabilities for current gpu (must be _D3D_ build) */
     GFX_HWVER_D3D10_0 = 1,  /**< uses D3D10 graphics capabilities for current gpu (must be _D3D_ build) */
+    GFX_HWVER_GL4_4 = 11, /**< uses GL4.4 graphics capabilities for current gpu (must be _GL_ build) */
     GFX_HWVER_GL4_3 = 10, /**< uses GL4.3 graphics capabilities for current gpu (must be _GL_ build) */
     GFX_HWVER_GL4_2 = 9, /**< uses GL4.2 graphics capabilities for current gpu (must be _GL_ build) */
     GFX_HWVER_GL4_0 = 8, /**< uses GL4.0 graphics capabilities for current gpu (must be _GL_ build) */

src/engine/d3d/gfx-shader-d3d.cpp

     }
     cb->buffer_size = cb_desc.Size;
     cb->name_hash = hashtable_str(name);
+    cb->end_offset = cb_desc.Size;
     memset(cb->cpu_buffer, 0x00, cb_desc.Size);
 
     return cb;

src/engine/gfx-shader.c

     }
     memset(cb->cpu_buffer, 0x00, size);
     cb->buffer_size = size;
+    cb->end_offset = size;
 
     return cb;
 }
     A_FREE(alloc, shader);
 }
 
-
 void gfx_shader_updatecblock(gfx_cmdqueue cmdqueue, struct gfx_cblock* cblock)
 {
     ASSERT(cblock->gpu_buffer);
-	gfx_buffer_update(cmdqueue, cblock->gpu_buffer, cblock->cpu_buffer, cblock->buffer_size);
+    gfx_buffer_update(cmdqueue, cblock->gpu_buffer, cblock->cpu_buffer, cblock->end_offset);
 }
 
 void shader_add_cache_item(hash_t vs_hash,
     cnt = minun(cnt, c->arr_size);
     for (uint32 i = 0; i < cnt; i++)
         memcpy(cb->cpu_buffer + c->offset + c->arr_stride*i, (const uint8*)sdata + i*size, s);
+}
 
+void gfx_cb_set_endoffset(struct gfx_cblock* cb, uint32 offset)
+{
+    cb->end_offset = minun(offset, cb->buffer_size);
 }
 
 struct gfx_shader* gfx_shader_get(uint32 shader_id)
         return NULL;
     }
     cb->buffer_size = tbuff_size;
+    cb->end_offset = tbuff_size;
     memset(cb->cpu_buffer, 0x00, tbuff_size);
 
     return cb;
         	params->hwver = GFX_HWVER_GL4_2;
         else if (str_isequal_nocase(ver, "gl4.3"))
             params->hwver = GFX_HWVER_GL4_3;
+        else if (str_isequal_nocase(ver, "gl4.4"))
+            params->hwver = GFX_HWVER_GL4_4;
         else
         	params->hwver = GFX_HWVER_UNKNOWN;
 

src/engine/gl/app-gl.c

         v->major = 4;
         v->minor = 2;
         break;
+    case GFX_HWVER_GL4_3:
+        v->major = 4;
+        v->minor = 3;
+        break;
+    case GFX_HWVER_GL4_4:
+        v->major = 4;
+        v->minor = 4;
+        break;
     default:
         v->major = INT32_MAX;
         v->minor = INT32_MAX;

src/engine/gl/gfx-cmdqueue-gl.c

     if (dest != NULL)   {
         memcpy(dest, data, s);
         glUnmapBuffer(target);
+    	cmdqueue->stats.map_cnt ++;
     }
+}
 
-	cmdqueue->stats.map_cnt ++;
+void gfx_buffer_update2(gfx_cmdqueue cmdqueue, gfx_buffer buffer, const void* data, uint32 size)
+{
+    ASSERT(buffer->type == GFX_OBJ_BUFFER);
+
+    uint32 s = minun(size, buffer->desc.buff.size);
+    GLuint target = (GLenum)buffer->desc.buff.type;
+    glBindBuffer(target, (GLuint)buffer->api_obj);
+    glBufferSubData(target, 0, s, data);
 }
 
 void gfx_reset_framestats(gfx_cmdqueue cmdqueue)

src/engine/gl/gfx-shader-gl.c

 		return NULL;
 	}
 	cblock->buffer_size = size;
+    cblock->end_offset = size;
 	memset(cblock->cpu_buffer, 0x00, size);
 
 	return cblock;

src/engine/renderpaths/gfx-deferred.c

         result->rt = g_deferred->prev_rt_result;
     }
 
-
-    
     PRF_CLOSESAMPLE();  /* deferred */
 }
 
         /* update data in tb_mtl */
         gfx_cb_setpvi(g_deferred->tb_mtls, SHADER_NAME(c_mtls), cb_mtl->cpu_buffer, 
             cb_mtl->buffer_size, idx);
+        gfx_cb_set_endoffset(g_deferred->tb_mtls, (idx+1)*cb_mtl->buffer_size);
 
         return idx;
     }   else    {
 
         /* add to db/tbuffer */
         gfx_cb_setpvi(g_deferred->tb_lights, SHADER_NAME(c_lights), &dlight, sizeof(dlight), idx);
+        gfx_cb_set_endoffset(g_deferred->tb_lights, (idx+1)*sizeof(dlight));
         hashtable_open_add(&tiles->light_table, hash, idx);
         tiles->light_cnt++;
 

src/msvs/dark-hammer.sln

 		Debug|Mixed Platforms = Debug|Mixed Platforms
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
+		Release_GL|Any CPU = Release_GL|Any CPU
+		Release_GL|Mixed Platforms = Release_GL|Mixed Platforms
+		Release_GL|Win32 = Release_GL|Win32
+		Release_GL|x64 = Release_GL|x64
 		Release_pybind|Any CPU = Release_pybind|Any CPU
 		Release_pybind|Mixed Platforms = Release_pybind|Mixed Platforms
 		Release_pybind|Win32 = Release_pybind|Win32
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Debug|Win32.Build.0 = Debug|Win32
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Debug|x64.ActiveCfg = Debug|x64
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Debug|x64.Build.0 = Debug|x64
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|Any CPU.ActiveCfg = Release|Win32
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|Mixed Platforms.ActiveCfg = Release|Win32
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|Mixed Platforms.Build.0 = Release|Win32
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|Win32.ActiveCfg = Release|Win32
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|Win32.Build.0 = Release|Win32
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|x64.ActiveCfg = Release|x64
+		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_GL|x64.Build.0 = Release|x64
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{5A44448C-3971-49C8-8E76-D6AA9F6BEF08}.Release_pybind|Mixed Platforms.Build.0 = Release|Win32
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Debug|Win32.Build.0 = Debug|Win32
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Debug|x64.ActiveCfg = Debug|x64
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Debug|x64.Build.0 = Debug|x64
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|Any CPU.ActiveCfg = Release|Win32
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|Mixed Platforms.ActiveCfg = Release|Win32
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|Mixed Platforms.Build.0 = Release|Win32
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|Win32.ActiveCfg = Release|Win32
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|Win32.Build.0 = Release|Win32
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|x64.ActiveCfg = Release|x64
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_GL|x64.Build.0 = Release|x64
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{20565152-B53D-42D1-A26D-979FC6F1D0F3}.Release_pybind|Mixed Platforms.Build.0 = Release|Win32
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Debug|Win32.Build.0 = Debug|Win32
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Debug|x64.ActiveCfg = Debug|x64
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Debug|x64.Build.0 = Debug|x64
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|Any CPU.ActiveCfg = Release_GL|Win32
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|Mixed Platforms.ActiveCfg = Release_GL|Win32
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|Mixed Platforms.Build.0 = Release_GL|Win32
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|Win32.ActiveCfg = Release_GL|Win32
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|Win32.Build.0 = Release_GL|Win32
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|x64.ActiveCfg = Release_GL|x64
+		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_GL|x64.Build.0 = Release_GL|x64
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_pybind|Any CPU.ActiveCfg = Release_pybind|Win32
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_pybind|Mixed Platforms.ActiveCfg = Release_pybind|Win32
 		{8A75B545-E4D1-443E-B9B2-41B36E9DD218}.Release_pybind|Mixed Platforms.Build.0 = Release_pybind|Win32
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Debug|Win32.Build.0 = Debug|Win32
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Debug|x64.ActiveCfg = Debug|x64
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Debug|x64.Build.0 = Debug|x64
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|Any CPU.ActiveCfg = Release|Win32
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|Mixed Platforms.ActiveCfg = Release|Win32
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|Mixed Platforms.Build.0 = Release|Win32
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|Win32.ActiveCfg = Release|Win32
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|Win32.Build.0 = Release|Win32
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|x64.ActiveCfg = Release|x64
+		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_GL|x64.Build.0 = Release|x64
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4}.Release_pybind|Mixed Platforms.Build.0 = Release|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Debug|Win32.ActiveCfg = Debug|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Debug|Win32.Build.0 = Debug|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Debug|x64.ActiveCfg = Debug|Win32
+		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_GL|Any CPU.ActiveCfg = Release|Win32
+		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_GL|Mixed Platforms.ActiveCfg = Release|Win32
+		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_GL|Win32.ActiveCfg = Release|Win32
+		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_GL|x64.ActiveCfg = Release|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32}.Release_pybind|Win32.ActiveCfg = Release|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Debug|Win32.Build.0 = Debug|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Debug|x64.ActiveCfg = Debug|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|Any CPU.ActiveCfg = Release|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|Mixed Platforms.ActiveCfg = Release|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|Mixed Platforms.Build.0 = Release|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|Win32.ActiveCfg = Release|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|Win32.Build.0 = Release|Win32
+		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_GL|x64.ActiveCfg = Release|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C}.Release_pybind|Mixed Platforms.Build.0 = Release|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Debug|Win32.ActiveCfg = Debug|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Debug|Win32.Build.0 = Debug|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Debug|x64.ActiveCfg = Debug|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|Any CPU.ActiveCfg = Release_GL|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|Mixed Platforms.ActiveCfg = Release_GL|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|Mixed Platforms.Build.0 = Release_GL|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|Win32.ActiveCfg = Release_GL|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|Win32.Build.0 = Release_GL|Win32
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_GL|x64.ActiveCfg = Release_GL|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_pybind|Any CPU.ActiveCfg = Release|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Win32
 		{8B6A871F-6A3C-43B1-A85F-30190A09FF36}.Release_pybind|Mixed Platforms.Build.0 = Release|Win32
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Debug|Win32.ActiveCfg = Debug|Any CPU
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|Any CPU.ActiveCfg = Release|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|Any CPU.Build.0 = Release|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|Mixed Platforms.Build.0 = Release|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|Win32.ActiveCfg = Release|Any CPU
+		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_GL|x64.ActiveCfg = Release|Any CPU
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_pybind|Any CPU.ActiveCfg = Release|Any CPU
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_pybind|Any CPU.Build.0 = Release|Any CPU
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Debug|Win32.ActiveCfg = Debug|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|Any CPU.ActiveCfg = Release|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|Any CPU.Build.0 = Release|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|Mixed Platforms.Build.0 = Release|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|Win32.ActiveCfg = Release|Any CPU
+		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_GL|x64.ActiveCfg = Release|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_pybind|Any CPU.ActiveCfg = Release|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_pybind|Any CPU.Build.0 = Release|Any CPU
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA}.Release_pybind|Mixed Platforms.ActiveCfg = Release|Any CPU
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
+		{8B6A871F-6A3C-43B1-A85F-30190A09FF36} = {983468B4-EB6C-4D2D-B19C-1FE58C0EFBF3}
+		{20565152-B53D-42D1-A26D-979FC6F1D0F3} = {983468B4-EB6C-4D2D-B19C-1FE58C0EFBF3}
 		{0E62F02C-4A9C-4D5C-A92A-0994E34DE16C} = {B4C2480B-D2C6-4A93-92C9-469C34F036C9}
 		{188342B0-EA8F-42B4-8BB9-9E468D145AE4} = {B4C2480B-D2C6-4A93-92C9-469C34F036C9}
-		{20565152-B53D-42D1-A26D-979FC6F1D0F3} = {983468B4-EB6C-4D2D-B19C-1FE58C0EFBF3}
-		{8B6A871F-6A3C-43B1-A85F-30190A09FF36} = {983468B4-EB6C-4D2D-B19C-1FE58C0EFBF3}
 		{CD456460-8C04-45A9-98F6-8021D2D8BD32} = {C8D44818-0C3A-4A70-A3D6-904CF0A3347F}
 		{61BFCA26-E4B4-463C-82AF-98A8A4C98E62} = {32946431-BA08-4087-900A-C463DD85334F}
 		{6CF8854C-6ABD-4AFC-B8B2-3A28E2C472DA} = {32946431-BA08-4087-900A-C463DD85334F}

src/msvs/engine.vcxproj

       <Configuration>Debug</Configuration>
       <Platform>x64</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Release_GL|Win32">
+      <Configuration>Release_GL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release_GL|x64">
+      <Configuration>Release_GL</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
     <ProjectConfiguration Include="Release_pybind|Win32">
       <Configuration>Release_pybind</Configuration>
       <Platform>Win32</Platform>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">true</ExcludedFromBuild>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\d3d\gfx-cmdqueue-d3d.cpp">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Default</CompileAs>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\d3d\gfx-device-d3d.cpp">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Default</CompileAs>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\d3d\gfx-shader-d3d.cpp">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Default</CompileAs>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;_ENABLEASSERT_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\debug-hud.c" />
     <ClCompile Include="..\engine\engine.c" />
     <ClCompile Include="..\engine\gl\app-gl.c">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\gl\gfx-cmdqueue-gl.c">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">false</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">true</ExcludedFromBuild>
     </ClCompile>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">false</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">true</ExcludedFromBuild>
     </ClCompile>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">false</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">true</ExcludedFromBuild>
     </ClCompile>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
     <ClCompile Include="..\engine\luabind\luaengine_wrap.cxx">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
     <ClCompile Include="..\engine\luabind\script-lua-core.cpp">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
     <ClCompile Include="..\engine\luabind\script-lua-engine.cpp">
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
     <ClCompile Include="..\engine\phx-prefab.c" />
     <ClCompile Include="..\engine\phx.c" />
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">CompileAsCpp</CompileAs>
       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">CompileAsCpp</CompileAs>
     </ClCompile>
     <ClCompile Include="..\engine\platform\win\hwinfo-win.c" />
     <ClCompile Include="..\engine\prf-mgr.c" />
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_GL|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\engine\renderpaths\gfx-csm.c" />
     <ClCompile Include="..\engine\renderpaths\gfx-deferred.c" />
     <CharacterSet>MultiByte</CharacterSet>
     <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <CharacterSet>MultiByte</CharacterSet>
     <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
     <LibraryPath>D:\sepul\dev\sdk\physx-3.2\Lib\win32;C:\Program Files %28x86%29\Microsoft DirectX SDK\Lib\x86;$(LibraryPath)</LibraryPath>
     <TargetName>dh_$(ProjectName)</TargetName>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">
+    <OutDir>..\..\bin\</OutDir>
+    <IntDir>..\..\build\dh\$(Configuration)\$(ProjectName)\</IntDir>
+    <TargetExt>.dll</TargetExt>
+    <IncludePath>D:\sepul\dev\sdk\physx-3.2\Include;C:\Program Files %28x86%29\Microsoft DirectX SDK\Include;$(IncludePath)</IncludePath>
+    <LibraryPath>D:\sepul\dev\sdk\physx-3.2\Lib\win32;C:\Program Files %28x86%29\Microsoft DirectX SDK\Lib\x86;$(LibraryPath)</LibraryPath>
+    <TargetName>dh_$(ProjectName)-gl</TargetName>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">
     <OutDir>..\..\src\pymodules\</OutDir>
     <IntDir>..\..\build\dh\$(Configuration)\$(ProjectName)\</IntDir>
     <LibraryPath>C:\Program Files %28x86%29\Microsoft DirectX SDK\Lib\x64;$(LibraryPath)</LibraryPath>
     <IncludePath>C:\Program Files %28x86%29\Microsoft DirectX SDK\Include;$(IncludePath)</IncludePath>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|x64'">
+    <OutDir>..\..\bin\</OutDir>
+    <IntDir>..\..\build\hmr\$(Configuration)\$(ProjectName)\</IntDir>
+    <TargetExt>.dll</TargetExt>
+    <LibraryPath>C:\Program Files %28x86%29\Microsoft DirectX SDK\Lib\x64;$(LibraryPath)</LibraryPath>
+    <IncludePath>C:\Program Files %28x86%29\Microsoft DirectX SDK\Include;$(IncludePath)</IncludePath>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|x64'">
     <OutDir>..\..\bin\</OutDir>
     <IntDir>..\..\build\hmr\$(Configuration)\$(ProjectName)\</IntDir>
       <IgnoreSpecificDefaultLibraries>libmmd;LIBCMT</IgnoreSpecificDefaultLibraries>
     </Link>
   </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>..\..\3rdparty\include\lua;..\..\3rdparty\include;..\..\3rdparty\include\msinttypes;..\..\include;..\..\include\engine</AdditionalIncludeDirectories>
+      <ExceptionHandling>false</ExceptionHandling>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <CompileAs>Default</CompileAs>
+      <PreprocessorDefinitions>_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;FULL_VERSION="0.4.6";_GL_;_PROFILE_;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableCilkKeywords>true</DisableCilkKeywords>
+      <DisableIntelLangExtensions>true</DisableIntelLangExtensions>
+      <C99Support>true</C99Support>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <AdditionalOptions>/Qfast-transcendentals- %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\..\lib\$(TargetName).lib</ImportLibrary>
+      <AdditionalLibraryDirectories>..\..\lib\;</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>
+      </IgnoreAllDefaultLibraries>
+      <AdditionalDependencies>dh_core.lib;lua.lib;mongoose.lib;libmmds.lib;gl3w.lib;glfw.lib;%(AdditionalDependencies);PhysX3_x86.lib;PhysX3Common_x86.lib;PhysX3Extensions.lib;PhysxProfileSDK.lib;OpenGL32.lib</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libmmd;LIBCMT</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|Win32'">
     <ClCompile>
       <WarningLevel>Level3</WarningLevel>
       <AdditionalDependencies>core.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>..\;..\..\3rdparty\include;..\..\3rdparty\include\msinttypes</AdditionalIncludeDirectories>
+      <ExceptionHandling>false</ExceptionHandling>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <CompileAs>CompileAsC</CompileAs>
+      <PreprocessorDefinitions>_ENGINE_EXPORT_;_SIMD_SSE_;_WIN_;_D3D_;_PROFILE_;FULL_VERSION="0.1.0";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableCilkKeywords>true</DisableCilkKeywords>
+      <DisableIntelLangExtensions>true</DisableIntelLangExtensions>
+      <C99Support>true</C99Support>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\..\lib\$(TargetName).lib</ImportLibrary>
+      <AdditionalLibraryDirectories>..\..\lib\;..\..\3rdparty\lib\</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>
+      </IgnoreAllDefaultLibraries>
+      <AdditionalDependencies>core.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_pybind|x64'">
     <ClCompile>
       <WarningLevel>Level3</WarningLevel>

src/msvs/game-test.vcxproj

       <Configuration>Debug</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Release_GL|Win32">
+      <Configuration>Release_GL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|Win32">
       <Configuration>Release</Configuration>
       <Platform>Win32</Platform>
     <CharacterSet>MultiByte</CharacterSet>
     <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>
+  </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
     <IntDir>..\..\build\dh\$(Configuration)\$(ProjectName)\</IntDir>
     <TargetName>$(ProjectName)</TargetName>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>..\..\bin\</OutDir>
+    <IntDir>..\..\build\dh\$(Configuration)\$(ProjectName)\</IntDir>
+    <TargetName>$(ProjectName)-gl</TargetName>
+  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <PrecompiledHeader>
       <AdditionalLibraryDirectories>..\..\lib\</AdditionalLibraryDirectories>
     </Link>
   </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_GL|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_WIN_</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\include;..\..\3rdparty\include</AdditionalIncludeDirectories>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FloatingPointModel>Fast</FloatingPointModel>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>dh_core.lib;dh_engine-gl.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\..\lib\</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\game-test\main.cpp" />
   </ItemGroup>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.