Skip to content

Commit 137605d

Browse files
committed
Fixed to OpenGL Renderer
Fixed memory leak Added shader source debug output GLSL version changed from 4.10 to 4.50
1 parent 43116d8 commit 137605d

File tree

5 files changed

+51
-23
lines changed

5 files changed

+51
-23
lines changed

src/Layers/xrRenderGL/Blender_Recorder_GL.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ void CBlender_Compile::r_Sampler_cmp(LPCSTR name, LPCSTR texture, bool b_ps1x_Pr
5050
void CBlender_Compile::r_Pass(LPCSTR _vs, LPCSTR _gs, LPCSTR _ps, bool bFog, BOOL bZtest, BOOL bZwrite, BOOL bABlend,
5151
D3DBLEND abSRC, D3DBLEND abDST, BOOL aTest, u32 aRef)
5252
{
53+
R_ASSERT2(_ps, "Probably you are using wrong r_Pass");
5354
RS.Invalidate();
5455
ctable.clear();
5556
passTextures.clear();

src/Layers/xrRenderPC_GL/blender_bloom_build.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,28 @@ void CBlender_bloom_build::Compile(CBlender_Compile& C)
1313
switch (C.iElement)
1414
{
1515
case 0: // transfer into bloom-target
16-
C.r_Pass("stub_notransform_build", "bloom_build", FALSE, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
16+
C.r_Pass("stub_notransform_build", "bloom_build", false, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
1717
D3DBLEND_INVSRCALPHA);
1818
C.r_Sampler_clf("s_image", r2_RT_generic1);
1919
C.r_End();
2020
break;
2121
case 1: // X-filter
22-
C.r_Pass("stub_notransform_filter", "bloom_filter", FALSE, FALSE, FALSE);
22+
C.r_Pass("stub_notransform_filter", "bloom_filter", false, FALSE, FALSE);
2323
C.r_Sampler_clf("s_bloom", r2_RT_bloom1);
2424
C.r_End();
2525
break;
2626
case 2: // Y-filter
27-
C.r_Pass("stub_notransform_filter", "bloom_filter", FALSE, FALSE, FALSE);
27+
C.r_Pass("stub_notransform_filter", "bloom_filter", false, FALSE, FALSE);
2828
C.r_Sampler_clf("s_bloom", r2_RT_bloom2);
2929
C.r_End();
3030
break;
3131
case 3: // FF-filter_P0
32-
C.r_Pass("stub_notransform_build", "bloom_filter_f", FALSE, FALSE, FALSE);
32+
C.r_Pass("stub_notransform_build", "bloom_filter_f", false, FALSE, FALSE);
3333
C.r_Sampler_clf("s_bloom", r2_RT_bloom1);
3434
C.r_End();
3535
break;
3636
case 4: // FF-filter_P1
37-
C.r_Pass("stub_notransform_build", "bloom_filter_f", FALSE, FALSE, FALSE);
37+
C.r_Pass("stub_notransform_build", "bloom_filter_f", false, FALSE, FALSE);
3838
C.r_Sampler_clf("s_bloom", r2_RT_bloom2);
3939
C.r_End();
4040
break;
@@ -51,28 +51,28 @@ void CBlender_bloom_build_msaa::Compile(CBlender_Compile& C)
5151
switch (C.iElement)
5252
{
5353
case 0: // transfer into bloom-target
54-
C.r_Pass("stub_notransform_build", "bloom_build", FALSE, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
54+
C.r_Pass("stub_notransform_build", "bloom_build", false, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
5555
D3DBLEND_INVSRCALPHA);
5656
C.r_Sampler_clf("s_image", r2_RT_generic1);
5757
C.r_End();
5858
break;
5959
case 1: // X-filter
60-
C.r_Pass("stub_notransform_filter", "bloom_filter", nullptr, false, FALSE);
60+
C.r_Pass("stub_notransform_filter", "bloom_filter", false, FALSE, FALSE);
6161
C.r_Sampler_clf("s_bloom", r2_RT_bloom1);
6262
C.r_End();
6363
break;
6464
case 2: // Y-filter
65-
C.r_Pass("stub_notransform_filter", "bloom_filter", nullptr, false, FALSE);
65+
C.r_Pass("stub_notransform_filter", "bloom_filter", false, FALSE, FALSE);
6666
C.r_Sampler_clf("s_bloom", r2_RT_bloom2);
6767
C.r_End();
6868
break;
6969
case 3: // FF-filter_P0
70-
C.r_Pass("stub_notransform_build", "bloom_filter_f", nullptr, false, FALSE);
70+
C.r_Pass("stub_notransform_build", "bloom_filter_f", false, FALSE, FALSE);
7171
C.r_Sampler_clf("s_bloom", r2_RT_bloom1);
7272
C.r_End();
7373
break;
7474
case 4: // FF-filter_P1
75-
C.r_Pass("stub_notransform_build", "bloom_filter_f", nullptr, false, FALSE);
75+
C.r_Pass("stub_notransform_build", "bloom_filter_f", false, FALSE, FALSE);
7676
C.r_Sampler_clf("s_bloom", r2_RT_bloom2);
7777
C.r_End();
7878
break;
@@ -89,7 +89,7 @@ void CBlender_postprocess_msaa::Compile(CBlender_Compile& C)
8989
switch (C.iElement)
9090
{
9191
case 0: // transfer into bloom-target
92-
C.r_Pass("stub_notransform_postpr", "postprocess", FALSE, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
92+
C.r_Pass("stub_notransform_postpr", "postprocess", false, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
9393
D3DBLEND_INVSRCALPHA);
9494
C.r_Sampler_clf("s_base0", r2_RT_generic);
9595
C.r_Sampler_clf("s_base1", r2_RT_generic);
@@ -98,7 +98,7 @@ void CBlender_postprocess_msaa::Compile(CBlender_Compile& C)
9898
break;
9999

100100
case 4: // use color map
101-
C.r_Pass("stub_notransform_postpr", "postprocess_CM", FALSE, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
101+
C.r_Pass("stub_notransform_postpr", "postprocess_CM", false, FALSE, FALSE, FALSE, D3DBLEND_SRCALPHA,
102102
D3DBLEND_INVSRCALPHA);
103103
C.r_Sampler_clf("s_base0", r2_RT_generic);
104104
C.r_Sampler_clf("s_base1", r2_RT_generic);

src/Layers/xrRenderPC_GL/blender_ssao.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void CBlender_SSAO_noMSAA::Compile(CBlender_Compile& C)
1313
switch (C.iElement)
1414
{
1515
case 0: // calculate SSAO
16-
C.r_Pass("combine_1", "ssao_calc_nomsaa", nullptr, false, FALSE);
16+
C.r_Pass("combine_1", "ssao_calc_nomsaa", false, FALSE, FALSE);
1717
C.r_Stencil(TRUE, D3DCMP_LESSEQUAL, 0xFF); // stencil should be >= 1
1818
C.r_StencilRef(0x01);
1919
C.r_CullMode(D3DCULL_NONE);
@@ -28,7 +28,7 @@ void CBlender_SSAO_noMSAA::Compile(CBlender_Compile& C)
2828
C.r_End();
2929
break;
3030
case 1: // depth downsample for HBAO
31-
C.r_Pass("combine_1", "depth_downs", nullptr, false, FALSE);
31+
C.r_Pass("combine_1", "depth_downs", false, FALSE, FALSE);
3232
// C.r_Stencil (TRUE, D3DCMP_LESSEQUAL, 0xFF); // stencil should be >= 1
3333
// C.r_StencilRef (0x01);
3434
C.r_CullMode(D3DCULL_NONE);
@@ -57,7 +57,7 @@ void CBlender_SSAO_MSAA::Compile(CBlender_Compile& C)
5757
switch (C.iElement)
5858
{
5959
case 0: // combine
60-
C.r_Pass("combine_1", "ssao_calc_msaa", nullptr, false, FALSE);
60+
C.r_Pass("combine_1", "ssao_calc_msaa", false, FALSE, FALSE);
6161
C.r_Stencil(TRUE, D3DCMP_EQUAL, 0x81); // stencil should be >= 1
6262
C.r_StencilRef(0x81);
6363
C.r_CullMode(D3DCULL_NONE);

src/Layers/xrRenderPC_GL/gl_rendertarget.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@
1616

1717
void CRenderTarget::u_setrt(const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, GLuint zb)
1818
{
19-
VERIFY(_1);
20-
dwWidth = _1->dwWidth;
21-
dwHeight = _1->dwHeight;
19+
if (_1)
20+
{
21+
dwWidth = _1->dwWidth;
22+
dwHeight = _1->dwHeight;
23+
}
24+
else
25+
VERIFY3(false, __FUNCTION__, "TODO: implement 'else' path");
26+
2227
GLenum buffers[3] = {GL_NONE};
2328
if (_1)
2429
{
@@ -44,9 +49,14 @@ void CRenderTarget::u_setrt(const ref_rt& _1, const ref_rt& _2, const ref_rt& _3
4449

4550
void CRenderTarget::u_setrt(const ref_rt& _1, const ref_rt& _2, GLuint zb)
4651
{
47-
VERIFY(_1);
48-
dwWidth = _1->dwWidth;
49-
dwHeight = _1->dwHeight;
52+
if (_1)
53+
{
54+
dwWidth = _1->dwWidth;
55+
dwHeight = _1->dwHeight;
56+
}
57+
else
58+
VERIFY3(false, __FUNCTION__, "TODO: implement 'else' path");
59+
5060
GLenum buffers[2] = {GL_NONE};
5161
if (_1)
5262
{

src/Layers/xrRenderPC_GL/rgl.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,9 +1265,9 @@ HRESULT CRender::shader_compile(
12651265
sprintf_s(name_comment, "// %s\n", name);
12661266
const char** sources = xr_alloc<const char*>(sources_len);
12671267
#ifdef DEBUG
1268-
sources[0] = "#version 410\n#pragma optimize (off)\n";
1268+
sources[0] = "#version 450\n#pragma optimize (off)\n";
12691269
#else
1270-
sources[0] = "#version 410\n";
1270+
sources[0] = "#version 450\n";
12711271
#endif
12721272
sources[1] = name_comment;
12731273
memcpy(sources + 2, defines, def_len * sizeof(char*));
@@ -1326,11 +1326,28 @@ HRESULT CRender::shader_compile(
13261326

13271327
if ((GLboolean)status == GL_FALSE)
13281328
{
1329+
#ifdef DEBUG
1330+
GLint srcLen;
1331+
CHK_GL(glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &srcLen));
1332+
GLchar* shaderSrc = xr_alloc<GLchar>(srcLen);
1333+
CHK_GL(glGetShaderSource(shader, srcLen, nullptr, shaderSrc));
1334+
#endif
1335+
13291336
Msg("! shader compilation failed");
13301337
Log("! ", name);
13311338
if (_pErrorMsgs)
13321339
Log("! error: ", _pErrorMsgs);
13331340

1341+
#ifdef DEBUG
1342+
if (shaderSrc)
1343+
{
1344+
Log("Shader source:");
1345+
Log(shaderSrc);
1346+
Log("Shader source end.");
1347+
}
1348+
#endif
1349+
1350+
CHK_GL(glDeleteShader(shader));
13341351
return E_FAIL;
13351352
}
13361353

0 commit comments

Comments
 (0)