diff --git a/src.cmake b/src.cmake index 306a087319..8a382b5405 100644 --- a/src.cmake +++ b/src.cmake @@ -139,67 +139,71 @@ set(RENDERERLIST ) set(GLSLSOURCELIST + # Common shader libraries ${ENGINE_DIR}/renderer/glsl_source/common.glsl ${ENGINE_DIR}/renderer/glsl_source/common_cp.glsl ${ENGINE_DIR}/renderer/glsl_source/shaderProfiler_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/shaderProfiler_fp.glsl + + # Material system shaders + ${ENGINE_DIR}/renderer/glsl_source/material_cp.glsl + ${ENGINE_DIR}/renderer/glsl_source/material_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/material_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/clearSurfaces_cp.glsl ${ENGINE_DIR}/renderer/glsl_source/cull_cp.glsl ${ENGINE_DIR}/renderer/glsl_source/depthReduction_cp.glsl ${ENGINE_DIR}/renderer/glsl_source/processSurfaces_cp.glsl - ${ENGINE_DIR}/renderer/glsl_source/material_cp.glsl - ${ENGINE_DIR}/renderer/glsl_source/material_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/material_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/skybox_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/ssao_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/ssao_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/vertexAnimation_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/vertexSimple_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/vertexSkinning_vp.glsl + + # Screen-space shaders + ${ENGINE_DIR}/renderer/glsl_source/screenSpace_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/blur_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/blur_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/cameraEffects_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/cameraEffects_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/computeLight_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/contrast_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/contrast_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/debugShadowMap_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/debugShadowMap_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/deformVertexes_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/depthtile1_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/fogGlobal_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/fxaa_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/fxaa3_11_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/motionblur_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/ssao_fp.glsl + + # Lighting shaders ${ENGINE_DIR}/renderer/glsl_source/depthtile1_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/depthtile1_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/depthtile2_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/depthtile2_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fogGlobal_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fogGlobal_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fogQuake3_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/lighttile_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/lighttile_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/computeLight_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/reliefMapping_fp.glsl + + # Common vertex shader libraries + ${ENGINE_DIR}/renderer/glsl_source/deformVertexes_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/vertexAnimation_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/vertexSimple_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/vertexSkinning_vp.glsl + + # Regular shaders + ${ENGINE_DIR}/renderer/glsl_source/debugShadowMap_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/debugShadowMap_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/fogQuake3_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/forwardLighting_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/fogQuake3_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/forwardLighting_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fxaa_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fxaa_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/fxaa3_11_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/generic_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/forwardLighting_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/generic_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/heatHaze_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/generic_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/heatHaze_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/lightMapping_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/heatHaze_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/lightMapping_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/lighttile_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/lighttile_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/liquid_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/lightMapping_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/liquid_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/motionblur_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/motionblur_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/portal_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/liquid_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/portal_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/reflection_CB_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/portal_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/reflection_CB_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/reliefMapping_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/screen_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/reflection_CB_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/screen_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/shadowFill_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/screen_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/shadowFill_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/shadowFill_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/skybox_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/skybox_fp.glsl ) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 512cdfb7df..56633baf20 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -43,42 +43,45 @@ ShaderKind shaderKind = ShaderKind::Unknown; // *INDENT-OFF* -GLShader_generic *gl_genericShader = nullptr; -GLShader_genericMaterial *gl_genericShaderMaterial = nullptr; GLShader_cull *gl_cullShader = nullptr; GLShader_depthReduction *gl_depthReductionShader = nullptr; GLShader_clearSurfaces *gl_clearSurfacesShader = nullptr; GLShader_processSurfaces *gl_processSurfacesShader = nullptr; + +GLShader_blur *gl_blurShader = nullptr; +GLShader_cameraEffects *gl_cameraEffectsShader = nullptr; +GLShader_contrast *gl_contrastShader = nullptr; +GLShader_fogGlobal *gl_fogGlobalShader = nullptr; +GLShader_fxaa *gl_fxaaShader = nullptr; +GLShader_motionblur *gl_motionblurShader = nullptr; +GLShader_ssao *gl_ssaoShader = nullptr; + +GLShader_depthtile1 *gl_depthtile1Shader = nullptr; +GLShader_depthtile2 *gl_depthtile2Shader = nullptr; +GLShader_lighttile *gl_lighttileShader = nullptr; + +GLShader_generic *gl_genericShader = nullptr; +GLShader_genericMaterial *gl_genericShaderMaterial = nullptr; GLShader_lightMapping *gl_lightMappingShader = nullptr; GLShader_lightMappingMaterial *gl_lightMappingShaderMaterial = nullptr; GLShader_forwardLighting_omniXYZ *gl_forwardLightingShader_omniXYZ = nullptr; GLShader_forwardLighting_projXYZ *gl_forwardLightingShader_projXYZ = nullptr; GLShader_forwardLighting_directionalSun *gl_forwardLightingShader_directionalSun = nullptr; -GLShader_shadowFill *gl_shadowFillShader = nullptr; -GLShader_reflection *gl_reflectionShader = nullptr; -GLShader_reflectionMaterial *gl_reflectionShaderMaterial = nullptr; -GLShader_skybox *gl_skyboxShader = nullptr; -GLShader_skyboxMaterial *gl_skyboxShaderMaterial = nullptr; GLShader_fogQuake3 *gl_fogQuake3Shader = nullptr; GLShader_fogQuake3Material *gl_fogQuake3ShaderMaterial = nullptr; -GLShader_fogGlobal *gl_fogGlobalShader = nullptr; GLShader_heatHaze *gl_heatHazeShader = nullptr; GLShader_heatHazeMaterial *gl_heatHazeShaderMaterial = nullptr; +GLShader_liquid *gl_liquidShader = nullptr; +GLShader_liquidMaterial *gl_liquidShaderMaterial = nullptr; +GLShader_portal *gl_portalShader = nullptr; +GLShader_reflection *gl_reflectionShader = nullptr; +GLShader_reflectionMaterial *gl_reflectionShaderMaterial = nullptr; GLShader_screen *gl_screenShader = nullptr; GLShader_screenMaterial *gl_screenShaderMaterial = nullptr; -GLShader_portal *gl_portalShader = nullptr; -GLShader_contrast *gl_contrastShader = nullptr; -GLShader_cameraEffects *gl_cameraEffectsShader = nullptr; -GLShader_blur *gl_blurShader = nullptr; +GLShader_shadowFill *gl_shadowFillShader = nullptr; +GLShader_skybox *gl_skyboxShader = nullptr; +GLShader_skyboxMaterial *gl_skyboxShaderMaterial = nullptr; GLShader_debugShadowMap *gl_debugShadowMapShader = nullptr; -GLShader_liquid *gl_liquidShader = nullptr; -GLShader_liquidMaterial *gl_liquidShaderMaterial = nullptr; -GLShader_motionblur *gl_motionblurShader = nullptr; -GLShader_ssao *gl_ssaoShader = nullptr; -GLShader_depthtile1 *gl_depthtile1Shader = nullptr; -GLShader_depthtile2 *gl_depthtile2Shader = nullptr; -GLShader_lighttile *gl_lighttileShader = nullptr; -GLShader_fxaa *gl_fxaaShader = nullptr; GLShaderManager gl_shaderManager; namespace // Implementation details @@ -882,18 +885,18 @@ void GLShaderManager::InitDriverInfo() } void GLShaderManager::GenerateBuiltinHeaders() { - GLVersionDeclaration = GLHeader("GLVersionDeclaration", GenFragmentVertexVersionDeclaration(), this); - GLComputeVersionDeclaration = GLHeader( "GLComputeVersionDeclaration", GenComputeVersionDeclaration(), this ); - GLCompatHeader = GLHeader("GLCompatHeader", GenCompatHeader(), this); - GLVertexHeader = GLHeader("GLVertexHeader", GenVertexHeader(), this); - GLFragmentHeader = GLHeader("GLFragmentHeader", GenFragmentHeader(), this); - GLComputeHeader = GLHeader( "GLComputeHeader", GenComputeHeader(), this ); - GLWorldHeader = GLHeader( "GLWorldHeader", GenWorldHeader(), this ); - GLEngineConstants = GLHeader("GLEngineConstants", GenEngineConstants(), this); + GLVersionDeclaration = GLHeader( "GLVersionDeclaration", GenFragmentVertexVersionDeclaration() ); + GLComputeVersionDeclaration = GLHeader( "GLComputeVersionDeclaration", GenComputeVersionDeclaration() ); + GLCompatHeader = GLHeader( "GLCompatHeader", GenCompatHeader() ); + GLVertexHeader = GLHeader( "GLVertexHeader", GenVertexHeader() ); + GLFragmentHeader = GLHeader( "GLFragmentHeader", GenFragmentHeader() ); + GLComputeHeader = GLHeader( "GLComputeHeader", GenComputeHeader() ); + GLWorldHeader = GLHeader( "GLWorldHeader", GenWorldHeader() ); + GLEngineConstants = GLHeader( "GLEngineConstants", GenEngineConstants() ); } void GLShaderManager::GenerateWorldHeaders() { - GLWorldHeader = GLHeader( "GLWorldHeader", GenWorldHeader(), this ); + GLWorldHeader = GLHeader( "GLWorldHeader", GenWorldHeader() ); } std::string GLShaderManager::GetDeformShaderName( const int index ) { @@ -1155,16 +1158,16 @@ bool GLShaderManager::BuildPermutation( GLShader* shader, int macroIndex, int de ShaderProgramDescriptor* program; std::vector shaders; - if ( shader->_hasVertexShader ) { + if ( shader->hasVertexShader ) { const uint32_t macros = shader->GetUniqueCompileMacros( macroIndex, GLCompileMacro::VERTEX ); shaders.emplace_back( ShaderEntry{ shader->_name, macros, GL_VERTEX_SHADER } ); shaders.emplace_back( ShaderEntry{ GetDeformShaderName( deformIndex ), 0, GL_VERTEX_SHADER } ); } - if ( shader->_hasFragmentShader ) { + if ( shader->hasFragmentShader ) { const uint32_t macros = shader->GetUniqueCompileMacros( macroIndex, GLCompileMacro::FRAGMENT ); shaders.emplace_back( ShaderEntry{ shader->_name, macros, GL_FRAGMENT_SHADER } ); } - if ( shader->_hasComputeShader ) { + if ( shader->hasComputeShader ) { shaders.emplace_back( ShaderEntry{ shader->_name, 0, GL_COMPUTE_SHADER } ); } @@ -1196,8 +1199,6 @@ void GLShaderManager::BuildAll() { while ( !_shaderBuildQueue.empty() ) { GLShader* shader = _shaderBuildQueue.front(); - std::string shaderName = shader->GetMainShaderName(); - size_t numPermutations = static_cast( 1 ) << shader->GetNumOfCompiledMacros(); for( size_t i = 0; i < numPermutations; i++ ) { @@ -1276,13 +1277,13 @@ std::string GLShaderManager::BuildShaderText( const std::string& mainShaderText, uint32_t count = 0; for ( GLHeader* header : headers ) { - count += header->getText().size(); + count += header->text.size(); } combinedText.reserve( count ); for ( GLHeader* header : headers ) { - combinedText += header->getText(); + combinedText += header->text; } const char* compileMacrosP = macros.c_str(); @@ -1325,31 +1326,33 @@ void GLShaderManager::InitShader( GLShader* shader ) { GLenum GLType; const char* postfix; + std::string path; uint32_t offset; std::vector headers; - std::string path = ""; std::string mainText = ""; }; ShaderType shaderTypes[] = { - { shader->_hasVertexShader, GLCompileMacro::VERTEX, GL_VERTEX_SHADER, "_vp", - uint32_t( GLVersionDeclaration.getText().size() ), + { shader->hasVertexShader, GLCompileMacro::VERTEX, GL_VERTEX_SHADER, "_vp", + shader->vertexShaderName, + uint32_t( GLVersionDeclaration.text.size() ), { &GLVersionDeclaration, &GLCompatHeader, &GLEngineConstants, &GLVertexHeader } }, - { shader->_hasFragmentShader, GLCompileMacro::FRAGMENT, GL_FRAGMENT_SHADER, "_fp", - uint32_t( GLVersionDeclaration.getText().size() ), + { shader->hasFragmentShader, GLCompileMacro::FRAGMENT, GL_FRAGMENT_SHADER, "_fp", + shader->fragmentShaderName, + uint32_t( GLVersionDeclaration.text.size() ), { &GLVersionDeclaration, &GLCompatHeader, &GLEngineConstants, &GLFragmentHeader } }, - { shader->_hasComputeShader, GLCompileMacro::COMPUTE, GL_COMPUTE_SHADER, "_cp", - uint32_t( GLComputeVersionDeclaration.getText().size() ), + { shader->hasComputeShader, GLCompileMacro::COMPUTE, GL_COMPUTE_SHADER, "_cp", + shader->computeShaderName, + uint32_t( GLComputeVersionDeclaration.text.size() ), { &GLComputeVersionDeclaration, &GLCompatHeader, &GLEngineConstants, &GLComputeHeader, &GLWorldHeader } } }; char filename[MAX_QPATH]; for ( ShaderType& shaderType : shaderTypes ) { if ( shaderType.enabled ) { - Com_sprintf( filename, sizeof( filename ), "%s%s.glsl", shader->GetMainShaderName().c_str(), shaderType.postfix ); + Com_sprintf( filename, sizeof( filename ), "%s%s.glsl", shaderType.path.c_str(), shaderType.postfix ); - shaderType.path = filename; shaderType.mainText = GetShaderText( filename ); } } @@ -2293,7 +2296,7 @@ GLuint GLShader::GetProgram( int deformIndex ) { // program may not be loaded yet because the shader manager hasn't yet gotten to it // so try to load it now if ( index >= shaderPrograms.size() || !shaderPrograms[index].id ) { - _shaderManager->BuildPermutation( this, macroIndex, deformIndex ); + gl_shaderManager.BuildPermutation( this, macroIndex, deformIndex ); } // program is still not loaded @@ -2326,7 +2329,7 @@ void GLShader::BindProgram( int deformIndex ) { // so try to load it now if ( index >= shaderPrograms.size() || !shaderPrograms[index].id ) { - _shaderManager->BuildPermutation( this, macroIndex, deformIndex ); + gl_shaderManager.BuildPermutation( this, macroIndex, deformIndex ); } // program is still not loaded @@ -2362,13 +2365,13 @@ void GLShader::BindProgram( int deformIndex ) { void GLShader::DispatchCompute( const GLuint globalWorkgroupX, const GLuint globalWorkgroupY, const GLuint globalWorkgroupZ ) { ASSERT_EQ( currentProgram, glState.currentProgram ); - ASSERT( _hasComputeShader ); + ASSERT( hasComputeShader ); glDispatchCompute( globalWorkgroupX, globalWorkgroupY, globalWorkgroupZ ); } void GLShader::DispatchComputeIndirect( const GLintptr indirectBuffer ) { ASSERT_EQ( currentProgram, glState.currentProgram ); - ASSERT( _hasComputeShader ); + ASSERT( hasComputeShader ); glDispatchComputeIndirect( indirectBuffer ); } @@ -2397,8 +2400,9 @@ void GLShader::WriteUniformsToBuffer( uint32_t* buffer ) { } } -GLShader_generic::GLShader_generic( GLShaderManager *manager ) : - GLShader( "generic", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, manager ), +GLShader_generic::GLShader_generic() : + GLShader( "generic", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, + false, "generic", "generic" ), u_ColorMap( this ), u_DepthMap( this ), u_TextureMatrix( this ), @@ -2429,8 +2433,9 @@ void GLShader_generic::SetShaderProgramUniforms( ShaderProgramDescriptor *shader glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 1 ); } -GLShader_genericMaterial::GLShader_genericMaterial( GLShaderManager* manager ) : - GLShader( "genericMaterial", "generic", true, ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, manager ), +GLShader_genericMaterial::GLShader_genericMaterial() : + GLShader( "genericMaterial", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, + true, "generic", "generic" ), u_ColorMap( this ), u_DepthMap( this ), u_TextureMatrix( this ), @@ -2457,9 +2462,9 @@ void GLShader_genericMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 1 ); } -GLShader_lightMapping::GLShader_lightMapping( GLShaderManager *manager ) : - GLShader( "lightMapping", - ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, manager ), +GLShader_lightMapping::GLShader_lightMapping() : + GLShader( "lightMapping", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, + false, "lightMapping", "lightMapping" ), u_DiffuseMap( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2525,9 +2530,9 @@ void GLShader_lightMapping::SetShaderProgramUniforms( ShaderProgramDescriptor *s } } -GLShader_lightMappingMaterial::GLShader_lightMappingMaterial( GLShaderManager* manager ) : - GLShader( "lightMappingMaterial", "lightMapping", true, - ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, manager ), +GLShader_lightMappingMaterial::GLShader_lightMappingMaterial() : + GLShader( "lightMappingMaterial", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR, + true, "lightMapping", "lightMapping" ), u_DiffuseMap( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2587,8 +2592,9 @@ void GLShader_lightMappingMaterial::SetShaderProgramUniforms( ShaderProgramDescr } } -GLShader_forwardLighting_omniXYZ::GLShader_forwardLighting_omniXYZ( GLShaderManager *manager ): - GLShader("forwardLighting_omniXYZ", "forwardLighting", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager), +GLShader_forwardLighting_omniXYZ::GLShader_forwardLighting_omniXYZ(): + GLShader( "forwardLighting_omniXYZ", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "forwardLighting", "forwardLighting" ), u_DiffuseMap( this ), u_NormalMap( this ), u_MaterialMap( this ), @@ -2640,8 +2646,9 @@ void GLShader_forwardLighting_omniXYZ::SetShaderProgramUniforms( ShaderProgramDe glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_forwardLighting_projXYZ::GLShader_forwardLighting_projXYZ( GLShaderManager *manager ): - GLShader("forwardLighting_projXYZ", "forwardLighting", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager), +GLShader_forwardLighting_projXYZ::GLShader_forwardLighting_projXYZ(): + GLShader( "forwardLighting_projXYZ", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "forwardLighting", "forwardLighting" ), u_DiffuseMap( this ), u_NormalMap( this ), u_MaterialMap( this ), @@ -2699,8 +2706,9 @@ void GLShader_forwardLighting_projXYZ::SetShaderProgramUniforms( ShaderProgramDe glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_forwardLighting_directionalSun::GLShader_forwardLighting_directionalSun( GLShaderManager *manager ): - GLShader("forwardLighting_directionalSun", "forwardLighting", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager), +GLShader_forwardLighting_directionalSun::GLShader_forwardLighting_directionalSun(): + GLShader( "forwardLighting_directionalSun", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "forwardLighting", "forwardLighting" ), u_DiffuseMap( this ), u_NormalMap( this ), u_MaterialMap( this ), @@ -2772,8 +2780,9 @@ void GLShader_forwardLighting_directionalSun::SetShaderProgramUniforms( ShaderPr glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_shadowFill::GLShader_shadowFill( GLShaderManager *manager ) : - GLShader( "shadowFill", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_shadowFill::GLShader_shadowFill() : + GLShader( "shadowFill", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "shadowFill", "shadowFill" ), u_ColorMap( this ), u_TextureMatrix( this ), u_AlphaThreshold( this ), @@ -2796,8 +2805,9 @@ void GLShader_shadowFill::SetShaderProgramUniforms( ShaderProgramDescriptor *sha glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); } -GLShader_reflection::GLShader_reflection( GLShaderManager *manager ): - GLShader("reflection", "reflection_CB", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_reflection::GLShader_reflection(): + GLShader( "reflection", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "reflection_CB", "reflection_CB" ), u_ColorMapCube( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2826,8 +2836,9 @@ void GLShader_reflection::SetShaderProgramUniforms( ShaderProgramDescriptor *sha glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_reflectionMaterial::GLShader_reflectionMaterial( GLShaderManager* manager ) : - GLShader( "reflectionMaterial", "reflection_CB", true, ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_reflectionMaterial::GLShader_reflectionMaterial() : + GLShader( "reflectionMaterial", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + true, "reflection_CB", "reflection_CB" ), u_ColorMapCube( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2850,8 +2861,9 @@ void GLShader_reflectionMaterial::SetShaderProgramUniforms( ShaderProgramDescrip glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_skybox::GLShader_skybox( GLShaderManager *manager ) : - GLShader( "skybox", ATTR_POSITION, manager ), +GLShader_skybox::GLShader_skybox() : + GLShader( "skybox", ATTR_POSITION, + false, "skybox", "skybox" ), u_ColorMapCube( this ), u_CloudMap( this ), u_TextureMatrix( this ), @@ -2868,8 +2880,9 @@ void GLShader_skybox::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderP glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CloudMap" ), 1 ); } -GLShader_skyboxMaterial::GLShader_skyboxMaterial( GLShaderManager* manager ) : - GLShader( "skyboxMaterial", "skybox", true, ATTR_POSITION, manager ), +GLShader_skyboxMaterial::GLShader_skyboxMaterial() : + GLShader( "skyboxMaterial", ATTR_POSITION, + true, "skybox", "skybox" ), u_ColorMapCube( this ), u_CloudMap( this ), u_TextureMatrix( this ), @@ -2884,8 +2897,9 @@ void GLShader_skyboxMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CloudMap" ), 1 ); } -GLShader_fogQuake3::GLShader_fogQuake3( GLShaderManager *manager ) : - GLShader( "fogQuake3", ATTR_POSITION | ATTR_QTANGENT, manager ), +GLShader_fogQuake3::GLShader_fogQuake3() : + GLShader( "fogQuake3", ATTR_POSITION | ATTR_QTANGENT, + false, "fogQuake3", "fogQuake3" ), u_FogMap( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), @@ -2906,8 +2920,9 @@ void GLShader_fogQuake3::SetShaderProgramUniforms( ShaderProgramDescriptor *shad glUniform1i( glGetUniformLocation( shaderProgram->id, "u_FogMap" ), 0 ); } -GLShader_fogQuake3Material::GLShader_fogQuake3Material( GLShaderManager* manager ) : - GLShader( "fogQuake3Material", "fogQuake3", true, ATTR_POSITION | ATTR_QTANGENT, manager ), +GLShader_fogQuake3Material::GLShader_fogQuake3Material() : + GLShader( "fogQuake3Material", ATTR_POSITION | ATTR_QTANGENT, + true, "fogQuake3", "fogQuake3" ), u_FogMap( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), @@ -2922,11 +2937,11 @@ void GLShader_fogQuake3Material::SetShaderProgramUniforms( ShaderProgramDescript glUniform1i( glGetUniformLocation( shaderProgram->id, "u_FogMap" ), 0 ); } -GLShader_fogGlobal::GLShader_fogGlobal( GLShaderManager *manager ) : - GLShader( "fogGlobal", ATTR_POSITION, manager ), +GLShader_fogGlobal::GLShader_fogGlobal() : + GLShader( "fogGlobal", ATTR_POSITION, + false, "screenSpace", "fogGlobal" ), u_ColorMap( this ), u_DepthMap( this ), - u_ModelViewProjectionMatrix( this ), u_UnprojectMatrix( this ), u_Color( this ), u_FogDistanceVector( this ) @@ -2939,8 +2954,9 @@ void GLShader_fogGlobal::SetShaderProgramUniforms( ShaderProgramDescriptor *shad glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 1 ); } -GLShader_heatHaze::GLShader_heatHaze( GLShaderManager *manager ) : - GLShader( "heatHaze", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_heatHaze::GLShader_heatHaze() : + GLShader( "heatHaze", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "heatHaze", "heatHaze" ), u_CurrentMap( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2965,8 +2981,9 @@ void GLShader_heatHaze::SetShaderProgramUniforms( ShaderProgramDescriptor *shade glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_heatHazeMaterial::GLShader_heatHazeMaterial( GLShaderManager* manager ) : - GLShader( "heatHazeMaterial", "heatHaze", true, ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_heatHazeMaterial::GLShader_heatHazeMaterial() : + GLShader( "heatHazeMaterial", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + true, "heatHaze", "heatHaze" ), u_CurrentMap( this ), u_NormalMap( this ), u_HeightMap( this ), @@ -2987,8 +3004,9 @@ void GLShader_heatHazeMaterial::SetShaderProgramUniforms( ShaderProgramDescripto glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_screen::GLShader_screen( GLShaderManager *manager ) : - GLShader( "screen", ATTR_POSITION, manager ), +GLShader_screen::GLShader_screen() : + GLShader( "screen", ATTR_POSITION, + false, "screen", "screen" ), u_CurrentMap( this ), u_ModelViewProjectionMatrix( this ) { @@ -2999,8 +3017,9 @@ void GLShader_screen::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderP glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); } -GLShader_screenMaterial::GLShader_screenMaterial( GLShaderManager* manager ) : - GLShader( "screenMaterial", "screen", true, ATTR_POSITION, manager ), +GLShader_screenMaterial::GLShader_screenMaterial() : + GLShader( "screenMaterial", ATTR_POSITION, + true, "screen", "screen" ), u_CurrentMap( this ), u_ModelViewProjectionMatrix( this ) { } @@ -3009,8 +3028,9 @@ void GLShader_screenMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor* glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); } -GLShader_portal::GLShader_portal( GLShaderManager *manager ) : - GLShader( "portal", ATTR_POSITION, manager ), +GLShader_portal::GLShader_portal() : + GLShader( "portal", ATTR_POSITION, + false, "portal", "portal" ), u_CurrentMap( this ), u_ModelViewMatrix( this ), u_ModelViewProjectionMatrix( this ), @@ -3023,11 +3043,10 @@ void GLShader_portal::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderP glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); } -GLShader_contrast::GLShader_contrast( GLShaderManager *manager ) : - GLShader( "contrast", ATTR_POSITION, manager ), - u_ColorMap( this ), - u_ModelViewProjectionMatrix( this ) -{ +GLShader_contrast::GLShader_contrast() : + GLShader( "contrast", ATTR_POSITION, + false, "screenSpace", "contrast" ), + u_ColorMap( this ) { } void GLShader_contrast::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) @@ -3035,14 +3054,13 @@ void GLShader_contrast::SetShaderProgramUniforms( ShaderProgramDescriptor *shade glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); } -GLShader_cameraEffects::GLShader_cameraEffects( GLShaderManager *manager ) : - GLShader( "cameraEffects", ATTR_POSITION | ATTR_TEXCOORD, manager ), +GLShader_cameraEffects::GLShader_cameraEffects() : + GLShader( "cameraEffects", ATTR_POSITION, + false, "screenSpace", "cameraEffects" ), u_ColorMap3D( this ), u_CurrentMap( this ), u_GlobalLightFactor( this ), u_ColorModulate( this ), - u_TextureMatrix( this ), - u_ModelViewProjectionMatrix( this ), u_Tonemap( this ), u_TonemapParms( this ), u_TonemapExposure( this ), @@ -3056,10 +3074,10 @@ void GLShader_cameraEffects::SetShaderProgramUniforms( ShaderProgramDescriptor * glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap3D" ), 3 ); } -GLShader_blur::GLShader_blur( GLShaderManager *manager ) : - GLShader( "blur", ATTR_POSITION, manager ), +GLShader_blur::GLShader_blur() : + GLShader( "blur", ATTR_POSITION, + false, "screenSpace", "blur" ), u_ColorMap( this ), - u_ModelViewProjectionMatrix( this ), u_DeformMagnitude( this ), u_TexScale( this ), u_Horizontal( this ) @@ -3071,8 +3089,9 @@ void GLShader_blur::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderPro glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); } -GLShader_debugShadowMap::GLShader_debugShadowMap( GLShaderManager *manager ) : - GLShader( "debugShadowMap", ATTR_POSITION, manager ), +GLShader_debugShadowMap::GLShader_debugShadowMap() : + GLShader( "debugShadowMap", ATTR_POSITION, + false, "debugShadowMap", "debugShadowMap" ), u_CurrentMap( this ), u_ModelViewProjectionMatrix( this ) { @@ -3083,8 +3102,9 @@ void GLShader_debugShadowMap::SetShaderProgramUniforms( ShaderProgramDescriptor glUniform1i( glGetUniformLocation( shaderProgram->id, "u_CurrentMap" ), 0 ); } -GLShader_liquid::GLShader_liquid( GLShaderManager *manager ) : - GLShader( "liquid", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_liquid::GLShader_liquid() : + GLShader( "liquid", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + false, "liquid", "liquid" ), u_CurrentMap( this ), u_DepthMap( this ), u_NormalMap( this ), @@ -3126,8 +3146,9 @@ void GLShader_liquid::SetShaderProgramUniforms( ShaderProgramDescriptor* shaderP glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_liquidMaterial::GLShader_liquidMaterial( GLShaderManager* manager ) : - GLShader( "liquidMaterial", "liquid", true, ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ), +GLShader_liquidMaterial::GLShader_liquidMaterial() : + GLShader( "liquidMaterial", ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, + true, "liquid", "liquid" ), u_CurrentMap( this ), u_DepthMap( this ), u_NormalMap( this ), @@ -3170,11 +3191,11 @@ void GLShader_liquidMaterial::SetShaderProgramUniforms( ShaderProgramDescriptor glUniform1i( glGetUniformLocation( shaderProgram->id, "u_HeightMap" ), 15 ); } -GLShader_motionblur::GLShader_motionblur( GLShaderManager *manager ) : - GLShader( "motionblur", ATTR_POSITION, manager ), +GLShader_motionblur::GLShader_motionblur() : + GLShader( "motionblur", ATTR_POSITION, + false, "screenSpace", "motionblur" ), u_ColorMap( this ), u_DepthMap( this ), - u_ModelViewProjectionMatrix( this ), u_blurVec( this ) { } @@ -3185,10 +3206,10 @@ void GLShader_motionblur::SetShaderProgramUniforms( ShaderProgramDescriptor *sha glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 1 ); } -GLShader_ssao::GLShader_ssao( GLShaderManager *manager ) : - GLShader( "ssao", ATTR_POSITION, manager ), +GLShader_ssao::GLShader_ssao() : + GLShader( "ssao", ATTR_POSITION, + false, "screenSpace", "ssao" ), u_DepthMap( this ), - u_ModelViewProjectionMatrix( this ), u_UnprojectionParams( this ), u_zFar( this ) { @@ -3199,8 +3220,9 @@ void GLShader_ssao::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderPro glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); } -GLShader_depthtile1::GLShader_depthtile1( GLShaderManager *manager ) : - GLShader( "depthtile1", ATTR_POSITION, manager ), +GLShader_depthtile1::GLShader_depthtile1() : + GLShader( "depthtile1", ATTR_POSITION, + false, "depthtile1", "depthtile1" ), u_DepthMap( this ), u_ModelViewProjectionMatrix( this ), u_zFar( this ) @@ -3212,11 +3234,10 @@ void GLShader_depthtile1::SetShaderProgramUniforms( ShaderProgramDescriptor *sha glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); } -GLShader_depthtile2::GLShader_depthtile2( GLShaderManager *manager ) : - GLShader( "depthtile2", ATTR_POSITION, manager ), - u_DepthMap( this ), - u_ModelViewProjectionMatrix( this ) -{ +GLShader_depthtile2::GLShader_depthtile2() : + GLShader( "depthtile2", ATTR_POSITION, + false, "screenSpace", "depthtile2" ), + u_DepthMap( this ) { } void GLShader_depthtile2::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) @@ -3224,8 +3245,9 @@ void GLShader_depthtile2::SetShaderProgramUniforms( ShaderProgramDescriptor *sha glUniform1i( glGetUniformLocation( shaderProgram->id, "u_DepthMap" ), 0 ); } -GLShader_lighttile::GLShader_lighttile( GLShaderManager *manager ) : - GLShader( "lighttile", ATTR_POSITION | ATTR_TEXCOORD, manager ), +GLShader_lighttile::GLShader_lighttile() : + GLShader( "lighttile", ATTR_POSITION | ATTR_TEXCOORD, + false, "lighttile", "lighttile" ), u_DepthMap( this ), u_Lights( this ), u_numLights( this ), @@ -3244,11 +3266,10 @@ void GLShader_lighttile::SetShaderProgramUniforms( ShaderProgramDescriptor *shad } } -GLShader_fxaa::GLShader_fxaa( GLShaderManager *manager ) : - GLShader( "fxaa", ATTR_POSITION, manager ), - u_ColorMap( this ), - u_ModelViewProjectionMatrix( this ) -{ +GLShader_fxaa::GLShader_fxaa() : + GLShader( "fxaa", ATTR_POSITION, + false, "screenSpace", "fxaa" ), + u_ColorMap( this ) { } void GLShader_fxaa::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) @@ -3256,8 +3277,9 @@ void GLShader_fxaa::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderPro glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 ); } -GLShader_cull::GLShader_cull( GLShaderManager* manager ) : - GLShader( "cull", ATTR_POSITION, manager, false, false, true ), +GLShader_cull::GLShader_cull() : + GLShader( "cull", + false, "cull" ), u_Frame( this ), u_ViewID( this ), u_TotalDrawSurfs( this ), @@ -3275,8 +3297,9 @@ GLShader_cull::GLShader_cull( GLShaderManager* manager ) : u_P11( this ) { } -GLShader_depthReduction::GLShader_depthReduction( GLShaderManager* manager ) : - GLShader( "depthReduction", ATTR_POSITION, manager, false, false, true ), +GLShader_depthReduction::GLShader_depthReduction() : + GLShader( "depthReduction", + false, "depthReduction" ), u_ViewWidth( this ), u_ViewHeight( this ), u_InitialDepthLevel( this ) { @@ -3286,13 +3309,15 @@ void GLShader_depthReduction::SetShaderProgramUniforms( ShaderProgramDescriptor* glUniform1i( glGetUniformLocation( shaderProgram->id, "depthTextureInitial" ), 0 ); } -GLShader_clearSurfaces::GLShader_clearSurfaces( GLShaderManager* manager ) : - GLShader( "clearSurfaces", ATTR_POSITION, manager, false, false, true ), +GLShader_clearSurfaces::GLShader_clearSurfaces() : + GLShader( "clearSurfaces", + false, "clearSurfaces" ), u_Frame( this ) { } -GLShader_processSurfaces::GLShader_processSurfaces( GLShaderManager* manager ) : - GLShader( "processSurfaces", ATTR_POSITION, manager, false, false, true ), +GLShader_processSurfaces::GLShader_processSurfaces() : + GLShader( "processSurfaces", + false, "processSurfaces" ), u_Frame( this ), u_ViewID( this ), u_SurfaceCommandsOffset( this ) { diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 5024ba78ea..ce0b454389 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -67,28 +67,19 @@ class GLShaderManager; // represents a piece of GLSL code that can be copied verbatim into // GLShaders, like a .h file in C++ -class GLHeader { -private: - std::string _name; - std::string _text; - uint32_t _lineCount; - GLShaderManager *_shaderManager; - -public: - GLHeader() : _name(), _text(), _lineCount(), _shaderManager( nullptr ) - {} +struct GLHeader { + std::string name; + std::string text; - GLHeader( const std::string &name, const std::string &text, GLShaderManager *manager ) : - _name( name ), - _text( text ), - _lineCount( std::count( text.begin(), text.end(), '\n' ) ), - _shaderManager( manager ) { + GLHeader() : + name(), + text() { } - const std::string &getName() const { return _name; } - const std::string &getText() const { return _text; } - uint32_t getLineCount() const { return _lineCount; } - const GLShaderManager *getManager() const { return _shaderManager; } + GLHeader( const std::string& newName, const std::string& newText ) : + name( newName ), + text( newText ) { + } }; class GLShader { @@ -98,22 +89,25 @@ class GLShader { GLShader &operator = ( const GLShader & ) = delete; std::string _name; - std::string _mainShaderName; + const uint32_t _vertexAttribsRequired; + const bool _useMaterialSystem; + + std::string vertexShaderName; + std::string fragmentShaderName; + std::string computeShaderName; + const bool hasVertexShader; + const bool hasFragmentShader; + const bool hasComputeShader; + GLuint std430Size = 0; - uint padding = 0; - uint textureCount = 0; + uint32_t padding = 0; + uint32_t textureCount = 0; protected: - int _activeMacros; - unsigned int _checkSum; + int _activeMacros = 0; ShaderProgramDescriptor* currentProgram; - const uint32_t _vertexAttribsRequired; - uint32_t _vertexAttribs; // can be set by uniforms - GLShaderManager *_shaderManager; + uint32_t _vertexAttribs = 0; // can be set by uniforms - bool _hasVertexShader; - bool _hasFragmentShader; - bool _hasComputeShader; std::vector shaderPrograms; std::vector vertexShaderDescriptors; @@ -125,53 +119,29 @@ class GLShader { std::vector _uniformBlocks; std::vector _compileMacros; - GLShader( const std::string &name, uint32_t vertexAttribsRequired, GLShaderManager *manager, - const bool hasVertexShader = true, const bool hasFragmentShader = true, const bool hasComputeShader = false ) : - _name( name ), - _mainShaderName( name ), - _useMaterialSystem( false ), - _activeMacros( 0 ), - _checkSum( 0 ), - _vertexAttribsRequired( vertexAttribsRequired ), - _vertexAttribs( 0 ), - _shaderManager( manager ), - _hasVertexShader( hasVertexShader ), - _hasFragmentShader( hasFragmentShader ), - _hasComputeShader( hasComputeShader ), - _uniformStorageSize( 0 ) { - } - - GLShader( const std::string &name, const std::string &mainShaderName, uint32_t vertexAttribsRequired, GLShaderManager *manager, - const bool hasVertexShader = true, const bool hasFragmentShader = true, const bool hasComputeShader = false ) : + GLShader( const std::string& name, uint32_t vertexAttribsRequired, + const bool useMaterialSystem, + const std::string newVertexShaderName, const std::string newFragmentShaderName ) : _name( name ), - _mainShaderName( mainShaderName ), - _useMaterialSystem( false ), - _activeMacros( 0 ), - _checkSum( 0 ), _vertexAttribsRequired( vertexAttribsRequired ), - _vertexAttribs( 0 ), - _shaderManager( manager ), - _hasVertexShader( hasVertexShader ), - _hasFragmentShader( hasFragmentShader ), - _hasComputeShader( hasComputeShader ), - _uniformStorageSize( 0 ) { + _useMaterialSystem( useMaterialSystem ), + vertexShaderName( newVertexShaderName), + fragmentShaderName( newFragmentShaderName ), + hasVertexShader( true ), + hasFragmentShader( true ), + hasComputeShader( false ) { } - GLShader( const std::string& name, const std::string& mainShaderName, const bool useMaterialSystem, uint32_t vertexAttribsRequired, - GLShaderManager* manager, - const bool hasVertexShader = true, const bool hasFragmentShader = true, const bool hasComputeShader = false ) : + GLShader( const std::string& name, + const bool useMaterialSystem, + const std::string newComputeShaderName ) : _name( name ), - _mainShaderName( mainShaderName ), + _vertexAttribsRequired( 0 ), _useMaterialSystem( useMaterialSystem ), - _activeMacros( 0 ), - _checkSum( 0 ), - _vertexAttribsRequired( vertexAttribsRequired ), - _vertexAttribs( 0 ), - _shaderManager( manager ), - _hasVertexShader( hasVertexShader ), - _hasFragmentShader( hasFragmentShader ), - _hasComputeShader( hasComputeShader ), - _uniformStorageSize( 0 ) { + computeShaderName( newComputeShaderName ), + hasVertexShader( false ), + hasFragmentShader( false ), + hasComputeShader( true ) { } public: @@ -207,10 +177,6 @@ class GLShader { return _name; } - const std::string &GetMainShaderName() const { - return _mainShaderName; - } - protected: void PostProcessUniforms(); uint32_t GetUniqueCompileMacros( size_t permutation, const int type ) const; @@ -253,15 +219,15 @@ class GLShader { return std430Size; } - uint GetPadding() const { + uint32_t GetPadding() const { return padding; } - uint GetPaddedSize() const { + uint32_t GetPaddedSize() const { return std430Size + padding; } - uint GetTextureCount() const { + uint32_t GetTextureCount() const { return textureCount; } @@ -351,12 +317,6 @@ struct ShaderProgramDescriptor { macro |= descriptor->macro; - /* std::sort( shaderNames, shaderNames + shaderCount, - []( const ShaderEntry& lhs, const ShaderEntry& rhs ) { - return lhs.name < rhs.name; - } - ); */ - shaderCount++; }; }; @@ -397,7 +357,7 @@ class GLShaderManager { initCount = 0; } - shader = new T( this ); + shader = new T(); InitShader( shader ); _shaders.emplace_back( shader ); _shaderBuildQueue.push( shader ); @@ -4085,7 +4045,7 @@ class GLShader_generic : public GLCompileMacro_USE_DEPTH_FADE { public: - GLShader_generic( GLShaderManager *manager ); + GLShader_generic(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4111,7 +4071,7 @@ class GLShader_genericMaterial : public GLCompileMacro_USE_TCGEN_LIGHTMAP, public GLCompileMacro_USE_DEPTH_FADE { public: - GLShader_genericMaterial( GLShaderManager* manager ); + GLShader_genericMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4162,7 +4122,7 @@ class GLShader_lightMapping : public GLCompileMacro_USE_PHYSICAL_MAPPING { public: - GLShader_lightMapping( GLShaderManager *manager ); + GLShader_lightMapping(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4210,7 +4170,7 @@ class GLShader_lightMappingMaterial : public GLCompileMacro_USE_REFLECTIVE_SPECULAR, public GLCompileMacro_USE_PHYSICAL_MAPPING { public: - GLShader_lightMappingMaterial( GLShaderManager* manager ); + GLShader_lightMappingMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4253,7 +4213,7 @@ class GLShader_forwardLighting_omniXYZ : public GLCompileMacro_USE_SHADOWING //, { public: - GLShader_forwardLighting_omniXYZ( GLShaderManager *manager ); + GLShader_forwardLighting_omniXYZ(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4297,7 +4257,7 @@ class GLShader_forwardLighting_projXYZ : public GLCompileMacro_USE_SHADOWING //, { public: - GLShader_forwardLighting_projXYZ( GLShaderManager *manager ); + GLShader_forwardLighting_projXYZ(); void BuildShaderCompileMacros( std::string& compileMacros ) override; void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4349,7 +4309,7 @@ class GLShader_forwardLighting_directionalSun : public GLCompileMacro_USE_SHADOWING //, { public: - GLShader_forwardLighting_directionalSun( GLShaderManager *manager ); + GLShader_forwardLighting_directionalSun(); void BuildShaderCompileMacros( std::string& compileMacros ) override; void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4372,7 +4332,7 @@ class GLShader_shadowFill : public GLCompileMacro_LIGHT_DIRECTIONAL { public: - GLShader_shadowFill( GLShaderManager *manager ); + GLShader_shadowFill(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4398,7 +4358,7 @@ class GLShader_reflection : public GLCompileMacro_USE_RELIEF_MAPPING { public: - GLShader_reflection( GLShaderManager *manager ); + GLShader_reflection(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4419,7 +4379,7 @@ class GLShader_reflectionMaterial : public GLCompileMacro_USE_HEIGHTMAP_IN_NORMALMAP, public GLCompileMacro_USE_RELIEF_MAPPING { public: - GLShader_reflectionMaterial( GLShaderManager* manager ); + GLShader_reflectionMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4434,7 +4394,7 @@ class GLShader_skybox : public u_ModelViewProjectionMatrix { public: - GLShader_skybox( GLShaderManager *manager ); + GLShader_skybox(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4448,7 +4408,7 @@ class GLShader_skyboxMaterial : public u_AlphaThreshold, public u_ModelViewProjectionMatrix { public: - GLShader_skyboxMaterial( GLShaderManager* manager ); + GLShader_skyboxMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4468,7 +4428,7 @@ class GLShader_fogQuake3 : public GLCompileMacro_USE_VERTEX_ANIMATION { public: - GLShader_fogQuake3( GLShaderManager *manager ); + GLShader_fogQuake3(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4483,7 +4443,7 @@ class GLShader_fogQuake3Material : public u_FogEyeT, public GLDeformStage { public: - GLShader_fogQuake3Material( GLShaderManager* manager ); + GLShader_fogQuake3Material(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4491,13 +4451,12 @@ class GLShader_fogGlobal : public GLShader, public u_ColorMap, public u_DepthMap, - public u_ModelViewProjectionMatrix, public u_UnprojectMatrix, public u_Color, public u_FogDistanceVector { public: - GLShader_fogGlobal( GLShaderManager *manager ); + GLShader_fogGlobal(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4519,7 +4478,7 @@ class GLShader_heatHaze : public GLCompileMacro_USE_VERTEX_ANIMATION { public: - GLShader_heatHaze( GLShaderManager *manager ); + GLShader_heatHaze(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4538,7 +4497,7 @@ class GLShader_heatHazeMaterial : public GLDeformStage { public: - GLShader_heatHazeMaterial( GLShaderManager* manager ); + GLShader_heatHazeMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4548,7 +4507,7 @@ class GLShader_screen : public u_ModelViewProjectionMatrix { public: - GLShader_screen( GLShaderManager *manager ); + GLShader_screen(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4557,7 +4516,7 @@ class GLShader_screenMaterial : public u_CurrentMap, public u_ModelViewProjectionMatrix { public: - GLShader_screenMaterial( GLShaderManager* manager ); + GLShader_screenMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4569,17 +4528,15 @@ class GLShader_portal : public u_InversePortalRange { public: - GLShader_portal( GLShaderManager *manager ); + GLShader_portal(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; class GLShader_contrast : public GLShader, - public u_ColorMap, - public u_ModelViewProjectionMatrix -{ + public u_ColorMap { public: - GLShader_contrast( GLShaderManager *manager ); + GLShader_contrast(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4589,28 +4546,25 @@ class GLShader_cameraEffects : public u_CurrentMap, public u_GlobalLightFactor, public u_ColorModulate, - public u_TextureMatrix, - public u_ModelViewProjectionMatrix, public u_Tonemap, public u_TonemapParms, public u_TonemapExposure, public u_InverseGamma { public: - GLShader_cameraEffects( GLShaderManager *manager ); + GLShader_cameraEffects(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; class GLShader_blur : public GLShader, public u_ColorMap, - public u_ModelViewProjectionMatrix, public u_DeformMagnitude, public u_TexScale, public u_Horizontal { public: - GLShader_blur( GLShaderManager *manager ); + GLShader_blur(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4620,7 +4574,7 @@ class GLShader_debugShadowMap : public u_ModelViewProjectionMatrix { public: - GLShader_debugShadowMap( GLShaderManager *manager ); + GLShader_debugShadowMap(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4656,7 +4610,7 @@ class GLShader_liquid : public GLCompileMacro_USE_RELIEF_MAPPING { public: - GLShader_liquid( GLShaderManager *manager ); + GLShader_liquid(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4692,7 +4646,7 @@ class GLShader_liquidMaterial : public GLCompileMacro_USE_HEIGHTMAP_IN_NORMALMAP, public GLCompileMacro_USE_RELIEF_MAPPING { public: - GLShader_liquidMaterial( GLShaderManager* manager ); + GLShader_liquidMaterial(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4700,23 +4654,21 @@ class GLShader_motionblur : public GLShader, public u_ColorMap, public u_DepthMap, - public u_ModelViewProjectionMatrix, public u_blurVec { public: - GLShader_motionblur( GLShaderManager *manager ); + GLShader_motionblur(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; class GLShader_ssao : public GLShader, public u_DepthMap, - public u_ModelViewProjectionMatrix, public u_UnprojectionParams, public u_zFar { public: - GLShader_ssao( GLShaderManager *manager ); + GLShader_ssao(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4727,17 +4679,15 @@ class GLShader_depthtile1 : public u_zFar { public: - GLShader_depthtile1( GLShaderManager *manager ); + GLShader_depthtile1(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; class GLShader_depthtile2 : public GLShader, - public u_DepthMap, - public u_ModelViewProjectionMatrix -{ + public u_DepthMap { public: - GLShader_depthtile2( GLShaderManager *manager ); + GLShader_depthtile2(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4751,17 +4701,15 @@ class GLShader_lighttile : public u_zFar { public: - GLShader_lighttile( GLShaderManager *manager ); + GLShader_lighttile(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; class GLShader_fxaa : public GLShader, - public u_ColorMap, - public u_ModelViewProjectionMatrix -{ + public u_ColorMap { public: - GLShader_fxaa( GLShaderManager *manager ); + GLShader_fxaa(); void SetShaderProgramUniforms( ShaderProgramDescriptor *shaderProgram ) override; }; @@ -4783,7 +4731,7 @@ class GLShader_cull : public u_P00, public u_P11 { public: - GLShader_cull( GLShaderManager* manager ); + GLShader_cull(); }; class GLShader_depthReduction : @@ -4792,7 +4740,7 @@ class GLShader_depthReduction : public u_ViewHeight, public u_InitialDepthLevel { public: - GLShader_depthReduction( GLShaderManager* manager ); + GLShader_depthReduction(); void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override; }; @@ -4800,7 +4748,7 @@ class GLShader_clearSurfaces : public GLShader, public u_Frame { public: - GLShader_clearSurfaces( GLShaderManager* manager ); + GLShader_clearSurfaces(); }; class GLShader_processSurfaces : @@ -4809,7 +4757,7 @@ class GLShader_processSurfaces : public u_ViewID, public u_SurfaceCommandsOffset { public: - GLShader_processSurfaces( GLShaderManager* manager ); + GLShader_processSurfaces(); }; @@ -4817,42 +4765,45 @@ std::string GetShaderPath(); extern ShaderKind shaderKind; -extern GLShader_generic *gl_genericShader; -extern GLShader_genericMaterial *gl_genericShaderMaterial; extern GLShader_cull *gl_cullShader; extern GLShader_depthReduction *gl_depthReductionShader; extern GLShader_clearSurfaces *gl_clearSurfacesShader; extern GLShader_processSurfaces *gl_processSurfacesShader; + +extern GLShader_blur *gl_blurShader; +extern GLShader_cameraEffects *gl_cameraEffectsShader; +extern GLShader_contrast *gl_contrastShader; +extern GLShader_fogGlobal *gl_fogGlobalShader; +extern GLShader_fxaa *gl_fxaaShader; +extern GLShader_motionblur *gl_motionblurShader; +extern GLShader_ssao *gl_ssaoShader; + +extern GLShader_depthtile1 *gl_depthtile1Shader; +extern GLShader_depthtile2 *gl_depthtile2Shader; +extern GLShader_lighttile *gl_lighttileShader; + +extern GLShader_generic *gl_genericShader; +extern GLShader_genericMaterial *gl_genericShaderMaterial; extern GLShader_lightMapping *gl_lightMappingShader; extern GLShader_lightMappingMaterial *gl_lightMappingShaderMaterial; extern GLShader_forwardLighting_omniXYZ *gl_forwardLightingShader_omniXYZ; extern GLShader_forwardLighting_projXYZ *gl_forwardLightingShader_projXYZ; extern GLShader_forwardLighting_directionalSun *gl_forwardLightingShader_directionalSun; -extern GLShader_shadowFill *gl_shadowFillShader; -extern GLShader_reflection *gl_reflectionShader; -extern GLShader_reflectionMaterial *gl_reflectionShaderMaterial; -extern GLShader_skybox *gl_skyboxShader; -extern GLShader_skyboxMaterial *gl_skyboxShaderMaterial; extern GLShader_fogQuake3 *gl_fogQuake3Shader; extern GLShader_fogQuake3Material *gl_fogQuake3ShaderMaterial; -extern GLShader_fogGlobal *gl_fogGlobalShader; extern GLShader_heatHaze *gl_heatHazeShader; extern GLShader_heatHazeMaterial *gl_heatHazeShaderMaterial; +extern GLShader_liquid *gl_liquidShader; +extern GLShader_liquidMaterial *gl_liquidShaderMaterial; +extern GLShader_portal *gl_portalShader; +extern GLShader_reflection *gl_reflectionShader; +extern GLShader_reflectionMaterial *gl_reflectionShaderMaterial; extern GLShader_screen *gl_screenShader; extern GLShader_screenMaterial *gl_screenShaderMaterial; -extern GLShader_portal *gl_portalShader; -extern GLShader_contrast *gl_contrastShader; -extern GLShader_cameraEffects *gl_cameraEffectsShader; -extern GLShader_blur *gl_blurShader; +extern GLShader_shadowFill *gl_shadowFillShader; +extern GLShader_skybox *gl_skyboxShader; +extern GLShader_skyboxMaterial *gl_skyboxShaderMaterial; extern GLShader_debugShadowMap *gl_debugShadowMapShader; -extern GLShader_liquid *gl_liquidShader; -extern GLShader_liquidMaterial *gl_liquidShaderMaterial; -extern GLShader_motionblur *gl_motionblurShader; -extern GLShader_ssao *gl_ssaoShader; -extern GLShader_depthtile1 *gl_depthtile1Shader; -extern GLShader_depthtile2 *gl_depthtile2Shader; -extern GLShader_lighttile *gl_lighttileShader; -extern GLShader_fxaa *gl_fxaaShader; extern GLShaderManager gl_shaderManager; #endif // GL_SHADER_H diff --git a/src/engine/renderer/glsl_source/blur_vp.glsl b/src/engine/renderer/glsl_source/blur_vp.glsl deleted file mode 100644 index 2740ea962d..0000000000 --- a/src/engine/renderer/glsl_source/blur_vp.glsl +++ /dev/null @@ -1,32 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2008 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* blur_vp.glsl */ - -IN vec3 attr_Position; - -uniform mat4 u_ModelViewProjectionMatrix; - -void main() { - // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0 ); -} diff --git a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl index f4eb1f1e0c..bae518595b 100644 --- a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl +++ b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl @@ -32,10 +32,6 @@ uniform vec4 u_ColorModulate; uniform float u_GlobalLightFactor; // 1 / tr.identityLight uniform float u_InverseGamma; -IN(smooth) vec2 var_TexCoords; - -DECLARE_OUTPUT(vec4) - // Tone mapping is not available when high-precision float framebuffer isn't enabled or supported. #if defined(r_highPrecisionRendering) && defined(HAVE_ARB_texture_float) /* x: contrast @@ -53,6 +49,8 @@ vec3 TonemapLottes( vec3 color ) { } #endif +DECLARE_OUTPUT(vec4) + void main() { // calculate the screen texcoord in the 0.0 to 1.0 range diff --git a/src/engine/renderer/glsl_source/cameraEffects_vp.glsl b/src/engine/renderer/glsl_source/cameraEffects_vp.glsl deleted file mode 100644 index 2ba54052a1..0000000000 --- a/src/engine/renderer/glsl_source/cameraEffects_vp.glsl +++ /dev/null @@ -1,39 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2009-2010 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* cameraEffects_vp.glsl */ - -IN vec3 attr_Position; -IN vec2 attr_TexCoord0; - -uniform mat4 u_ModelViewProjectionMatrix; -uniform mat4 u_TextureMatrix; - -OUT(smooth) vec2 var_TexCoords; - -void main() -{ - // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4(attr_Position, 1.0); - - var_TexCoords = (u_TextureMatrix * vec4(attr_TexCoord0, 0.0, 1.0)).st; -} diff --git a/src/engine/renderer/glsl_source/contrast_vp.glsl b/src/engine/renderer/glsl_source/contrast_vp.glsl deleted file mode 100644 index 93d4c5ac8d..0000000000 --- a/src/engine/renderer/glsl_source/contrast_vp.glsl +++ /dev/null @@ -1,33 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2008 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* contrast_vp.glsl */ - -IN vec3 attr_Position; - -uniform mat4 u_ModelViewProjectionMatrix; - -void main() -{ - // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4(attr_Position, 1.0); -} diff --git a/src/engine/renderer/glsl_source/fogGlobal_vp.glsl b/src/engine/renderer/glsl_source/fogGlobal_vp.glsl deleted file mode 100644 index 8121cd4f89..0000000000 --- a/src/engine/renderer/glsl_source/fogGlobal_vp.glsl +++ /dev/null @@ -1,33 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2011 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* fogGlobal_vp.glsl */ - -IN vec3 attr_Position; - -uniform mat4 u_ModelViewProjectionMatrix; - -void main() -{ - // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4(attr_Position, 1.0); -} diff --git a/src/engine/renderer/glsl_source/fxaa_vp.glsl b/src/engine/renderer/glsl_source/fxaa_vp.glsl deleted file mode 100644 index dce68688fa..0000000000 --- a/src/engine/renderer/glsl_source/fxaa_vp.glsl +++ /dev/null @@ -1,42 +0,0 @@ -/* -=========================================================================== - -Daemon BSD Source Code -Copyright (c) 2013 Daemon Developers -All rights reserved. - -This file is part of the Daemon BSD Source Code (Daemon Source Code). - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Daemon developers nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL DAEMON DEVELOPERS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - -=========================================================================== -*/ - -/* fxaa_vp.glsl */ - -uniform mat4 u_ModelViewProjectionMatrix; -IN vec3 attr_Position; - -void main() -{ - gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0f ); -} diff --git a/src/engine/renderer/glsl_source/lighttile_fp.glsl b/src/engine/renderer/glsl_source/lighttile_fp.glsl index 7034ab2aaf..a737ccebbd 100644 --- a/src/engine/renderer/glsl_source/lighttile_fp.glsl +++ b/src/engine/renderer/glsl_source/lighttile_fp.glsl @@ -35,7 +35,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* lighttile_fp.glsl */ IN(smooth) vec2 vPosition; -IN(smooth) vec2 vTexCoord; struct Light { vec3 center; diff --git a/src/engine/renderer/glsl_source/lighttile_vp.glsl b/src/engine/renderer/glsl_source/lighttile_vp.glsl index 5929ecb7b7..4e5284415b 100644 --- a/src/engine/renderer/glsl_source/lighttile_vp.glsl +++ b/src/engine/renderer/glsl_source/lighttile_vp.glsl @@ -35,15 +35,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* lighttile_vp.glsl */ IN vec2 attr_Position; -IN vec2 attr_TexCoord0; OUT(smooth) vec2 vPosition; -OUT(smooth) vec2 vTexCoord; void main() { - gl_Position = vec4(attr_Position, 0.0, 1.0); + gl_Position = vec4( attr_Position, 0.0, 1.0 ); gl_PointSize = 1.0; vPosition = attr_Position; - vTexCoord = attr_TexCoord0; } diff --git a/src/engine/renderer/glsl_source/motionblur_vp.glsl b/src/engine/renderer/glsl_source/motionblur_vp.glsl deleted file mode 100644 index 5f4ac69374..0000000000 --- a/src/engine/renderer/glsl_source/motionblur_vp.glsl +++ /dev/null @@ -1,31 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2008 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* motionblur_vp.glsl */ - -uniform mat4 u_ModelViewProjectionMatrix; -IN vec3 attr_Position; - -void main() -{ - gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0f ); -} diff --git a/src/engine/renderer/glsl_source/depthtile2_vp.glsl b/src/engine/renderer/glsl_source/screenSpace_vp.glsl similarity index 87% rename from src/engine/renderer/glsl_source/depthtile2_vp.glsl rename to src/engine/renderer/glsl_source/screenSpace_vp.glsl index a6146f4185..75c3735c52 100644 --- a/src/engine/renderer/glsl_source/depthtile2_vp.glsl +++ b/src/engine/renderer/glsl_source/screenSpace_vp.glsl @@ -2,7 +2,7 @@ =========================================================================== Daemon BSD Source Code -Copyright (c) 2013-2016 Daemon Developers +Copyright (c) 2025 Daemon Developers All rights reserved. This file is part of the Daemon BSD Source Code (Daemon Source Code). @@ -32,13 +32,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================== */ -/* depthtile2_vp.glsl */ +/* screenSpace_vp.glsl */ -IN vec3 attr_Position; +const vec2 vertices[3] = vec2[3] ( vec2( -1.0f, -1.0f ), vec2( 3.0f, -1.0f ), vec2( -1.0f, 3.0f ) ); -uniform mat4 u_ModelViewProjectionMatrix; - -void main() -{ - gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0f ); +void main() { + gl_Position = vec4( vertices[gl_VertexID], 0.0f, 1.0f ); } diff --git a/src/engine/renderer/glsl_source/ssao_vp.glsl b/src/engine/renderer/glsl_source/ssao_vp.glsl deleted file mode 100644 index 93f6087cd5..0000000000 --- a/src/engine/renderer/glsl_source/ssao_vp.glsl +++ /dev/null @@ -1,32 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2008 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* ssao_vp.glsl */ - -IN vec3 attr_Position; - -uniform mat4 u_ModelViewProjectionMatrix; - -void main() -{ - gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0f ); -} diff --git a/src/engine/renderer/shaders.cpp b/src/engine/renderer/shaders.cpp index cba461b06b..40f14d107d 100644 --- a/src/engine/renderer/shaders.cpp +++ b/src/engine/renderer/shaders.cpp @@ -1,129 +1,132 @@ #include #include -#include "skybox_vp.glsl.h" -#include "ssao_fp.glsl.h" -#include "ssao_vp.glsl.h" -#include "vertexAnimation_vp.glsl.h" -#include "vertexSimple_vp.glsl.h" -#include "vertexSkinning_vp.glsl.h" + +#include "common.glsl.h" +#include "common_cp.glsl.h" +#include "shaderProfiler_vp.glsl.h" +#include "shaderProfiler_fp.glsl.h" + +#include "material_cp.glsl.h" +#include "material_vp.glsl.h" +#include "material_fp.glsl.h" +#include "clearSurfaces_cp.glsl.h" +#include "cull_cp.glsl.h" +#include "depthReduction_cp.glsl.h" +#include "processSurfaces_cp.glsl.h" + +#include "screenSpace_vp.glsl.h" #include "blur_fp.glsl.h" -#include "blur_vp.glsl.h" #include "cameraEffects_fp.glsl.h" -#include "cameraEffects_vp.glsl.h" -#include "computeLight_fp.glsl.h" #include "contrast_fp.glsl.h" -#include "contrast_vp.glsl.h" -#include "debugShadowMap_fp.glsl.h" -#include "debugShadowMap_vp.glsl.h" -#include "deformVertexes_vp.glsl.h" -#include "depthtile1_fp.glsl.h" +#include "fogGlobal_fp.glsl.h" +#include "fxaa_fp.glsl.h" +#include "fxaa3_11_fp.glsl.h" +#include "motionblur_fp.glsl.h" +#include "ssao_fp.glsl.h" + #include "depthtile1_vp.glsl.h" +#include "depthtile1_fp.glsl.h" #include "depthtile2_fp.glsl.h" -#include "depthtile2_vp.glsl.h" -#include "fogGlobal_fp.glsl.h" -#include "fogGlobal_vp.glsl.h" -#include "fogQuake3_fp.glsl.h" +#include "lighttile_vp.glsl.h" +#include "lighttile_fp.glsl.h" +#include "computeLight_fp.glsl.h" +#include "reliefMapping_fp.glsl.h" + +#include "deformVertexes_vp.glsl.h" +#include "vertexAnimation_vp.glsl.h" +#include "vertexSimple_vp.glsl.h" +#include "vertexSkinning_vp.glsl.h" + +#include "debugShadowMap_vp.glsl.h" +#include "debugShadowMap_fp.glsl.h" #include "fogQuake3_vp.glsl.h" -#include "forwardLighting_fp.glsl.h" +#include "fogQuake3_fp.glsl.h" #include "forwardLighting_vp.glsl.h" -#include "fxaa_fp.glsl.h" -#include "fxaa_vp.glsl.h" -#include "fxaa3_11_fp.glsl.h" -#include "generic_fp.glsl.h" +#include "forwardLighting_fp.glsl.h" #include "generic_vp.glsl.h" -#include "heatHaze_fp.glsl.h" +#include "generic_fp.glsl.h" #include "heatHaze_vp.glsl.h" -#include "lightMapping_fp.glsl.h" +#include "heatHaze_fp.glsl.h" #include "lightMapping_vp.glsl.h" -#include "lighttile_fp.glsl.h" -#include "lighttile_vp.glsl.h" -#include "liquid_fp.glsl.h" +#include "lightMapping_fp.glsl.h" #include "liquid_vp.glsl.h" -#include "motionblur_fp.glsl.h" -#include "motionblur_vp.glsl.h" -#include "portal_fp.glsl.h" +#include "liquid_fp.glsl.h" #include "portal_vp.glsl.h" -#include "reflection_CB_fp.glsl.h" +#include "portal_fp.glsl.h" #include "reflection_CB_vp.glsl.h" -#include "reliefMapping_fp.glsl.h" -#include "screen_fp.glsl.h" +#include "reflection_CB_fp.glsl.h" #include "screen_vp.glsl.h" -#include "shadowFill_fp.glsl.h" +#include "screen_fp.glsl.h" #include "shadowFill_vp.glsl.h" +#include "shadowFill_fp.glsl.h" +#include "skybox_vp.glsl.h" #include "skybox_fp.glsl.h" -#include "material_cp.glsl.h" -#include "material_vp.glsl.h" -#include "material_fp.glsl.h" -#include "common.glsl.h" -#include "common_cp.glsl.h" -#include "shaderProfiler_vp.glsl.h" -#include "shaderProfiler_fp.glsl.h" -#include "clearSurfaces_cp.glsl.h" -#include "cull_cp.glsl.h" -#include "depthReduction_cp.glsl.h" -#include "processSurfaces_cp.glsl.h" std::unordered_map shadermap({ - { "blur_fp.glsl", std::string(reinterpret_cast(blur_fp_glsl), sizeof(blur_fp_glsl)) }, - { "blur_vp.glsl", std::string(reinterpret_cast(blur_vp_glsl), sizeof(blur_vp_glsl)) }, - { "cameraEffects_fp.glsl", std::string(reinterpret_cast(cameraEffects_fp_glsl), sizeof(cameraEffects_fp_glsl)) }, - { "cameraEffects_vp.glsl", std::string(reinterpret_cast(cameraEffects_vp_glsl), sizeof(cameraEffects_vp_glsl)) }, - { "computeLight_fp.glsl", std::string(reinterpret_cast(computeLight_fp_glsl), sizeof(computeLight_fp_glsl)) }, - { "contrast_fp.glsl", std::string(reinterpret_cast(contrast_fp_glsl), sizeof(contrast_fp_glsl)) }, - { "contrast_vp.glsl", std::string(reinterpret_cast(contrast_vp_glsl), sizeof(contrast_vp_glsl)) }, + // Common shader libraries { "common.glsl", std::string( reinterpret_cast< const char* >( common_glsl ), sizeof( common_glsl ) ) }, { "common_cp.glsl", std::string( reinterpret_cast< const char* >( common_cp_glsl ), sizeof( common_cp_glsl ) ) }, - { "clearSurfaces_cp.glsl", std::string( reinterpret_cast< const char* >( clearSurfaces_cp_glsl ), sizeof( clearSurfaces_cp_glsl ) ) }, - { "cull_cp.glsl", std::string( reinterpret_cast< const char* >( cull_cp_glsl ), sizeof( cull_cp_glsl ) ) }, - { "depthReduction_cp.glsl", std::string( reinterpret_cast< const char* >( depthReduction_cp_glsl ), sizeof( depthReduction_cp_glsl ) ) }, - { "debugShadowMap_fp.glsl", std::string(reinterpret_cast(debugShadowMap_fp_glsl), sizeof(debugShadowMap_fp_glsl)) }, - { "debugShadowMap_vp.glsl", std::string(reinterpret_cast(debugShadowMap_vp_glsl), sizeof(debugShadowMap_vp_glsl)) }, - { "deformVertexes_vp.glsl", std::string(reinterpret_cast(deformVertexes_vp_glsl), sizeof(deformVertexes_vp_glsl)) }, - { "depthtile1_fp.glsl", std::string(reinterpret_cast(depthtile1_fp_glsl), sizeof(depthtile1_fp_glsl)) }, - { "depthtile1_vp.glsl", std::string(reinterpret_cast(depthtile1_vp_glsl), sizeof(depthtile1_vp_glsl)) }, - { "depthtile2_fp.glsl", std::string(reinterpret_cast(depthtile2_fp_glsl), sizeof(depthtile2_fp_glsl)) }, - { "depthtile2_vp.glsl", std::string(reinterpret_cast(depthtile2_vp_glsl), sizeof(depthtile2_vp_glsl)) }, - { "fogGlobal_fp.glsl", std::string(reinterpret_cast(fogGlobal_fp_glsl), sizeof(fogGlobal_fp_glsl)) }, - { "fogGlobal_vp.glsl", std::string(reinterpret_cast(fogGlobal_vp_glsl), sizeof(fogGlobal_vp_glsl)) }, - { "fogQuake3_fp.glsl", std::string(reinterpret_cast(fogQuake3_fp_glsl), sizeof(fogQuake3_fp_glsl)) }, - { "fogQuake3_vp.glsl", std::string(reinterpret_cast(fogQuake3_vp_glsl), sizeof(fogQuake3_vp_glsl)) }, - { "forwardLighting_fp.glsl", std::string(reinterpret_cast(forwardLighting_fp_glsl), sizeof(forwardLighting_fp_glsl)) }, - { "forwardLighting_vp.glsl", std::string(reinterpret_cast(forwardLighting_vp_glsl), sizeof(forwardLighting_vp_glsl)) }, - { "fxaa3_11_fp.glsl", std::string(reinterpret_cast(fxaa3_11_fp_glsl), sizeof(fxaa3_11_fp_glsl)) }, - { "fxaa_fp.glsl", std::string(reinterpret_cast(fxaa_fp_glsl), sizeof(fxaa_fp_glsl)) }, - { "fxaa_vp.glsl", std::string(reinterpret_cast(fxaa_vp_glsl), sizeof(fxaa_vp_glsl)) }, - { "generic_fp.glsl", std::string(reinterpret_cast(generic_fp_glsl), sizeof(generic_fp_glsl)) }, - { "generic_vp.glsl", std::string(reinterpret_cast(generic_vp_glsl), sizeof(generic_vp_glsl)) }, - { "heatHaze_fp.glsl", std::string(reinterpret_cast(heatHaze_fp_glsl), sizeof(heatHaze_fp_glsl)) }, - { "heatHaze_vp.glsl", std::string(reinterpret_cast(heatHaze_vp_glsl), sizeof(heatHaze_vp_glsl)) }, - { "lightMapping_fp.glsl", std::string(reinterpret_cast(lightMapping_fp_glsl), sizeof(lightMapping_fp_glsl)) }, - { "lightMapping_vp.glsl", std::string(reinterpret_cast(lightMapping_vp_glsl), sizeof(lightMapping_vp_glsl)) }, - { "lighttile_fp.glsl", std::string(reinterpret_cast(lighttile_fp_glsl), sizeof(lighttile_fp_glsl)) }, - { "lighttile_vp.glsl", std::string(reinterpret_cast(lighttile_vp_glsl), sizeof(lighttile_vp_glsl)) }, - { "liquid_fp.glsl", std::string(reinterpret_cast(liquid_fp_glsl), sizeof(liquid_fp_glsl)) }, - { "liquid_vp.glsl", std::string(reinterpret_cast(liquid_vp_glsl), sizeof(liquid_vp_glsl)) }, + { "shaderProfiler_vp.glsl", std::string( reinterpret_cast< const char* >( shaderProfiler_vp_glsl ), sizeof( shaderProfiler_vp_glsl ) ) }, + { "shaderProfiler_fp.glsl", std::string( reinterpret_cast< const char* >( shaderProfiler_fp_glsl ), sizeof( shaderProfiler_fp_glsl ) ) }, + + // Material system shaders { "material_cp.glsl", std::string( reinterpret_cast< const char* >( material_cp_glsl ), sizeof( material_cp_glsl ) ) }, { "material_vp.glsl", std::string( reinterpret_cast< const char* >( material_vp_glsl ), sizeof( material_vp_glsl ) ) }, { "material_fp.glsl", std::string( reinterpret_cast< const char* >( material_fp_glsl ), sizeof( material_fp_glsl ) ) }, - { "motionblur_fp.glsl", std::string(reinterpret_cast(motionblur_fp_glsl), sizeof(motionblur_fp_glsl)) }, - { "motionblur_vp.glsl", std::string(reinterpret_cast(motionblur_vp_glsl), sizeof(motionblur_vp_glsl)) }, - { "portal_fp.glsl", std::string(reinterpret_cast(portal_fp_glsl), sizeof(portal_fp_glsl)) }, - { "portal_vp.glsl", std::string(reinterpret_cast(portal_vp_glsl), sizeof(portal_vp_glsl)) }, + { "clearSurfaces_cp.glsl", std::string( reinterpret_cast< const char* >( clearSurfaces_cp_glsl ), sizeof( clearSurfaces_cp_glsl ) ) }, + { "cull_cp.glsl", std::string( reinterpret_cast< const char* >( cull_cp_glsl ), sizeof( cull_cp_glsl ) ) }, + { "depthReduction_cp.glsl", std::string( reinterpret_cast< const char* >( depthReduction_cp_glsl ), sizeof( depthReduction_cp_glsl ) ) }, { "processSurfaces_cp.glsl", std::string( reinterpret_cast< const char* >( processSurfaces_cp_glsl ), sizeof( processSurfaces_cp_glsl ) ) }, - { "reflection_CB_fp.glsl", std::string(reinterpret_cast(reflection_CB_fp_glsl), sizeof(reflection_CB_fp_glsl)) }, - { "reflection_CB_vp.glsl", std::string(reinterpret_cast(reflection_CB_vp_glsl), sizeof(reflection_CB_vp_glsl)) }, - { "reliefMapping_fp.glsl", std::string(reinterpret_cast(reliefMapping_fp_glsl), sizeof(reliefMapping_fp_glsl)) }, - { "screen_fp.glsl", std::string(reinterpret_cast(screen_fp_glsl), sizeof(screen_fp_glsl)) }, - { "screen_vp.glsl", std::string(reinterpret_cast(screen_vp_glsl), sizeof(screen_vp_glsl)) }, - { "shaderProfiler_vp.glsl", std::string( reinterpret_cast< const char* >( shaderProfiler_vp_glsl ), sizeof( shaderProfiler_vp_glsl ) ) }, - { "shaderProfiler_fp.glsl", std::string( reinterpret_cast< const char* >( shaderProfiler_fp_glsl ), sizeof( shaderProfiler_fp_glsl ) ) }, - { "shadowFill_fp.glsl", std::string(reinterpret_cast(shadowFill_fp_glsl), sizeof(shadowFill_fp_glsl)) }, - { "shadowFill_vp.glsl", std::string(reinterpret_cast(shadowFill_vp_glsl), sizeof(shadowFill_vp_glsl)) }, - { "skybox_fp.glsl", std::string(reinterpret_cast(skybox_fp_glsl), sizeof(skybox_fp_glsl)) }, - { "skybox_vp.glsl", std::string(reinterpret_cast(skybox_vp_glsl), sizeof(skybox_vp_glsl)) }, - { "ssao_fp.glsl", std::string(reinterpret_cast(ssao_fp_glsl), sizeof(ssao_fp_glsl)) }, - { "ssao_vp.glsl", std::string(reinterpret_cast(ssao_vp_glsl), sizeof(ssao_vp_glsl)) }, - { "vertexAnimation_vp.glsl", std::string(reinterpret_cast(vertexAnimation_vp_glsl), sizeof(vertexAnimation_vp_glsl)) }, - { "vertexSimple_vp.glsl", std::string(reinterpret_cast(vertexSimple_vp_glsl), sizeof(vertexSimple_vp_glsl)) }, - { "vertexSkinning_vp.glsl", std::string(reinterpret_cast(vertexSkinning_vp_glsl), sizeof(vertexSkinning_vp_glsl)) }, + + // Screen-space shaders + { "screenSpace_vp.glsl", std::string( reinterpret_cast< const char* >( screenSpace_vp_glsl ), sizeof( screenSpace_vp_glsl ) ) }, + { "blur_fp.glsl", std::string( reinterpret_cast< const char* >( blur_fp_glsl ), sizeof( blur_fp_glsl ) ) }, + { "cameraEffects_fp.glsl", std::string( reinterpret_cast< const char* >( cameraEffects_fp_glsl ), sizeof( cameraEffects_fp_glsl ) ) }, + { "contrast_fp.glsl", std::string( reinterpret_cast< const char* >( contrast_fp_glsl ), sizeof( contrast_fp_glsl ) ) }, + { "fogGlobal_fp.glsl", std::string( reinterpret_cast< const char* >( fogGlobal_fp_glsl ), sizeof( fogGlobal_fp_glsl ) ) }, + { "fxaa3_11_fp.glsl", std::string( reinterpret_cast< const char* >( fxaa3_11_fp_glsl ), sizeof( fxaa3_11_fp_glsl ) ) }, + { "fxaa_fp.glsl", std::string( reinterpret_cast< const char* >( fxaa_fp_glsl ), sizeof( fxaa_fp_glsl ) ) }, + { "motionblur_fp.glsl", std::string( reinterpret_cast< const char* >( motionblur_fp_glsl ), sizeof( motionblur_fp_glsl ) ) }, + { "ssao_fp.glsl", std::string( reinterpret_cast< const char* >( ssao_fp_glsl ), sizeof( ssao_fp_glsl ) ) }, + + // Lighting shaders + { "depthtile1_vp.glsl", std::string( reinterpret_cast< const char* >( depthtile1_vp_glsl ), sizeof( depthtile1_vp_glsl ) ) }, + { "depthtile1_fp.glsl", std::string( reinterpret_cast< const char* >( depthtile1_fp_glsl ), sizeof( depthtile1_fp_glsl ) ) }, + { "depthtile2_fp.glsl", std::string( reinterpret_cast< const char* >( depthtile2_fp_glsl ), sizeof( depthtile2_fp_glsl ) ) }, + { "lighttile_vp.glsl", std::string( reinterpret_cast< const char* >( lighttile_vp_glsl ), sizeof( lighttile_vp_glsl ) ) }, + { "lighttile_fp.glsl", std::string( reinterpret_cast< const char* >( lighttile_fp_glsl ), sizeof( lighttile_fp_glsl ) ) }, + { "computeLight_fp.glsl", std::string( reinterpret_cast< const char* >( computeLight_fp_glsl ), sizeof( computeLight_fp_glsl ) ) }, + { "reliefMapping_fp.glsl", std::string( reinterpret_cast< const char* >( reliefMapping_fp_glsl ), sizeof( reliefMapping_fp_glsl ) ) }, + + // Common vertex shader libraries + { "deformVertexes_vp.glsl", std::string( reinterpret_cast< const char* >( deformVertexes_vp_glsl ), sizeof( deformVertexes_vp_glsl ) ) }, + { "vertexAnimation_vp.glsl", std::string( reinterpret_cast< const char* >( vertexAnimation_vp_glsl ), sizeof( vertexAnimation_vp_glsl ) ) }, + { "vertexSimple_vp.glsl", std::string( reinterpret_cast< const char* >( vertexSimple_vp_glsl ), sizeof( vertexSimple_vp_glsl ) ) }, + { "vertexSkinning_vp.glsl", std::string( reinterpret_cast< const char* >( vertexSkinning_vp_glsl ), sizeof( vertexSkinning_vp_glsl ) ) }, + + // Regular shaders + { "debugShadowMap_vp.glsl", std::string( reinterpret_cast< const char* >( debugShadowMap_vp_glsl ), sizeof( debugShadowMap_vp_glsl ) ) }, + { "debugShadowMap_fp.glsl", std::string( reinterpret_cast< const char* >( debugShadowMap_fp_glsl ), sizeof( debugShadowMap_fp_glsl ) ) }, + { "fogQuake3_vp.glsl", std::string( reinterpret_cast< const char* >( fogQuake3_vp_glsl ), sizeof( fogQuake3_vp_glsl ) ) }, + { "fogQuake3_fp.glsl", std::string( reinterpret_cast< const char* >( fogQuake3_fp_glsl ), sizeof( fogQuake3_fp_glsl ) ) }, + { "forwardLighting_vp.glsl", std::string( reinterpret_cast< const char* >( forwardLighting_vp_glsl ), sizeof( forwardLighting_vp_glsl ) ) }, + { "forwardLighting_fp.glsl", std::string( reinterpret_cast< const char* >( forwardLighting_fp_glsl ), sizeof( forwardLighting_fp_glsl ) ) }, + { "generic_vp.glsl", std::string( reinterpret_cast< const char* >( generic_vp_glsl ), sizeof( generic_vp_glsl ) ) }, + { "generic_fp.glsl", std::string( reinterpret_cast< const char* >( generic_fp_glsl ), sizeof( generic_fp_glsl ) ) }, + { "heatHaze_vp.glsl", std::string( reinterpret_cast< const char* >( heatHaze_vp_glsl ), sizeof( heatHaze_vp_glsl ) ) }, + { "heatHaze_fp.glsl", std::string( reinterpret_cast< const char* >( heatHaze_fp_glsl ), sizeof( heatHaze_fp_glsl ) ) }, + { "lightMapping_vp.glsl", std::string( reinterpret_cast< const char* >( lightMapping_vp_glsl ), sizeof( lightMapping_vp_glsl ) ) }, + { "lightMapping_fp.glsl", std::string( reinterpret_cast< const char* >( lightMapping_fp_glsl ), sizeof( lightMapping_fp_glsl ) ) }, + { "liquid_vp.glsl", std::string( reinterpret_cast< const char* >( liquid_vp_glsl ), sizeof( liquid_vp_glsl ) ) }, + { "liquid_fp.glsl", std::string( reinterpret_cast< const char* >( liquid_fp_glsl ), sizeof( liquid_fp_glsl ) ) }, + { "portal_vp.glsl", std::string( reinterpret_cast< const char* >( portal_vp_glsl ), sizeof( portal_vp_glsl ) ) }, + { "portal_fp.glsl", std::string( reinterpret_cast< const char* >( portal_fp_glsl ), sizeof( portal_fp_glsl ) ) }, + { "reflection_CB_vp.glsl", std::string( reinterpret_cast< const char* >( reflection_CB_vp_glsl ), sizeof( reflection_CB_vp_glsl ) ) }, + { "reflection_CB_fp.glsl", std::string( reinterpret_cast< const char* >( reflection_CB_fp_glsl ), sizeof( reflection_CB_fp_glsl ) ) }, + { "screen_vp.glsl", std::string( reinterpret_cast< const char* >( screen_vp_glsl ), sizeof( screen_vp_glsl ) ) }, + { "screen_fp.glsl", std::string( reinterpret_cast< const char* >( screen_fp_glsl ), sizeof( screen_fp_glsl ) ) }, + { "shadowFill_vp.glsl", std::string( reinterpret_cast< const char* >( shadowFill_vp_glsl ), sizeof( shadowFill_vp_glsl ) ) }, + { "shadowFill_fp.glsl", std::string( reinterpret_cast< const char* >( shadowFill_fp_glsl ), sizeof( shadowFill_fp_glsl ) ) }, + { "skybox_vp.glsl", std::string( reinterpret_cast< const char* >( skybox_vp_glsl ), sizeof( skybox_vp_glsl ) ) }, + { "skybox_fp.glsl", std::string( reinterpret_cast< const char* >( skybox_fp_glsl ), sizeof( skybox_fp_glsl ) ) }, }); diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 9539a0fd96..572e5a72c4 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -2021,11 +2021,10 @@ static void RB_BlurShadowMap( const trRefLight_t *light, int i ) return; } - int index; + int index; image_t **images; - FBO_t **fbos; - vec2_t texScale; - matrix_t ortho; + FBO_t **fbos; + vec2_t texScale; fbos = ( light->l.rlType == refLightType_t::RL_DIRECTIONAL ) ? tr.sunShadowMapFBO : tr.shadowMapFBO; images = ( light->l.rlType == refLightType_t::RL_DIRECTIONAL ) ? tr.sunShadowMapFBOImage : tr.shadowMapFBOImage; @@ -2051,13 +2050,6 @@ static void RB_BlurShadowMap( const trRefLight_t *light, int i ) GL_Cull( cullType_t::CT_TWO_SIDED ); GL_State( GLS_DEPTHTEST_DISABLE ); - // GL_BindToTMU( 0, images[ index ] ); - - GL_PushMatrix(); - - MatrixOrthogonalProjection( ortho, 0, fbos[index]->width, 0, fbos[index]->height, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - gl_blurShader->BindProgram( 0 ); gl_blurShader->SetUniform_DeformMagnitude( 1 ); gl_blurShader->SetUniform_TexScale( texScale ); @@ -2067,7 +2059,7 @@ static void RB_BlurShadowMap( const trRefLight_t *light, int i ) GL_BindToTMU( 0, images[index] ) ); - Tess_InstantQuad( *gl_blurShader, 0, 0, fbos[ index ]->width, fbos[ index ]->height ); + Tess_InstantScreenSpaceQuad(); R_AttachFBOTexture2D( images[ index ]->type, images[ index ]->texnum, 0 ); @@ -2082,9 +2074,7 @@ static void RB_BlurShadowMap( const trRefLight_t *light, int i ) GL_BindToTMU( 0, images[index + MAX_SHADOWMAPS] ) ); - Tess_InstantQuad( *gl_blurShader, 0, 0, fbos[index]->width, fbos[index]->height ); - - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); } /* @@ -2877,6 +2867,8 @@ void RB_RenderPostDepthLightTile() backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); + GL_PopMatrix(); + // 2nd step R_BindFBO( tr.depthtile2FBO ); @@ -2890,11 +2882,7 @@ void RB_RenderPostDepthLightTile() GL_BindToTMU( 0, tr.depthtile1RenderImage ) ); - Tess_InstantQuad( *gl_depthtile2Shader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); vec3_t projToViewParams; projToViewParams[0] = tanf(DEG2RAD(backEnd.refdef.fov_x * 0.5f)) * backEnd.viewParms.zFar; @@ -2951,10 +2939,6 @@ void RB_RenderPostDepthLightTile() void RB_RenderGlobalFog() { - vec3_t local; - vec4_t fogDistanceVector; - matrix_t ortho; - GLimp_LogComment( "--- RB_RenderGlobalFog ---\n" ); if ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) @@ -2980,9 +2964,7 @@ void RB_RenderGlobalFog() backEnd.orientation = backEnd.viewParms.world; { - fog_t *fog; - - fog = &tr.world->fogs[ tr.world->globalFog ]; + fog_t* fog = &tr.world->fogs[ tr.world->globalFog ]; if ( r_logFile->integer ) { @@ -2992,6 +2974,8 @@ void RB_RenderGlobalFog() GL_State( GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA ); // all fogging distance is based on world Z units + vec4_t fogDistanceVector; + vec3_t local; VectorSubtract( backEnd.orientation.origin, backEnd.viewParms.orientation.origin, local ); fogDistanceVector[ 0 ] = -backEnd.orientation.modelViewMatrix[ 2 ]; fogDistanceVector[ 1 ] = -backEnd.orientation.modelViewMatrix[ 6 ]; @@ -2999,9 +2983,7 @@ void RB_RenderGlobalFog() fogDistanceVector[ 3 ] = DotProduct( local, backEnd.viewParms.orientation.axis[ 0 ] ); // scale the fog vectors based on the fog's thickness - fogDistanceVector[ 0 ] *= fog->tcScale; - fogDistanceVector[ 1 ] *= fog->tcScale; - fogDistanceVector[ 2 ] *= fog->tcScale; + VectorScale( fogDistanceVector, fog->tcScale, fogDistanceVector ); fogDistanceVector[ 3 ] *= fog->tcScale; gl_fogGlobalShader->SetUniform_FogDistanceVector( fogDistanceVector ); @@ -3020,21 +3002,7 @@ void RB_RenderGlobalFog() GL_BindToTMU( 1, tr.currentDepthImage ) ); - // set 2D virtual screen size - GL_PushMatrix(); - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, - -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - - // draw viewport - Tess_InstantQuad( *gl_fogGlobalShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - // go back to 3D - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); GL_CheckErrors(); } @@ -3048,15 +3016,6 @@ void RB_RenderBloom() return; } - // set 2D virtual screen size - GL_PushMatrix(); - matrix_t ortho; - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, - -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - { GL_State( GLS_DEPTHTEST_DISABLE ); GL_Cull( cullType_t::CT_TWO_SIDED ); @@ -3072,20 +3031,12 @@ void RB_RenderBloom() GL_ClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT ); - // draw viewport - Tess_InstantQuad( *gl_contrastShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); + Tess_InstantScreenSpaceQuad(); // render bloom in multiple passes GL_ClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); GL_State( GLS_DEPTHTEST_DISABLE ); - GL_PushMatrix(); - - MatrixOrthogonalProjection( ortho, 0, tr.bloomRenderFBO[0]->width, 0, tr.bloomRenderFBO[0]->height, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - vec2_t texScale; texScale[0] = 1.0f / tr.bloomRenderFBO[0]->width; texScale[1] = 1.0f / tr.bloomRenderFBO[0]->height; @@ -3106,9 +3057,8 @@ void RB_RenderBloom() for ( int j = 0; j < r_bloomPasses.Get(); j++ ) { R_BindFBO( tr.bloomRenderFBO[flip] ); glClear( GL_COLOR_BUFFER_BIT ); - Tess_InstantQuad( *gl_blurShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); + + Tess_InstantScreenSpaceQuad(); gl_blurShader->SetUniform_ColorMapBindless( GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip] ) @@ -3120,8 +3070,6 @@ void RB_RenderBloom() gl_blurShader->SetUniform_Horizontal( false ); } - GL_PopMatrix(); - R_BindFBO( tr.mainFBO[backEnd.currentMainFBO] ); gl_screenShader->BindProgram( 0 ); @@ -3129,13 +3077,19 @@ void RB_RenderBloom() glVertexAttrib4fv( ATTR_INDEX_COLOR, Color::White.ToArray() ); gl_screenShader->SetUniform_CurrentMapBindless( GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip ^ 1] ) ); + + GL_PushMatrix(); + + matrix_t ortho; + MatrixOrthogonalProjection( ortho, 0, tr.bloomRenderFBO[0]->width, 0, tr.bloomRenderFBO[0]->height, -99999, 99999 ); + GL_LoadProjectionMatrix( ortho ); + Tess_InstantQuad( *gl_screenShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - } + backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, + backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - // go back to 3D - GL_PopMatrix(); + GL_PopMatrix(); + } GL_CheckErrors(); } @@ -3169,20 +3123,7 @@ void RB_RenderMotionBlur() GL_BindToTMU( 1, tr.currentDepthImage ) ); - matrix_t ortho; - GL_PushMatrix(); - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, - backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - - // draw quad - Tess_InstantQuad( *gl_motionblurShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); GL_CheckErrors(); } @@ -3231,20 +3172,7 @@ void RB_RenderSSAO() GL_BindToTMU( 0, tr.currentDepthImage ) ); - matrix_t ortho; - GL_PushMatrix(); - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, - backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - - // draw quad - Tess_InstantQuad( *gl_ssaoShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); GL_CheckErrors(); } @@ -3278,19 +3206,7 @@ void RB_FXAA() backEnd.currentMainFBO = 1 - backEnd.currentMainFBO; R_BindFBO( tr.mainFBO[ backEnd.currentMainFBO ] ); - matrix_t ortho; - GL_PushMatrix(); - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, - backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - - Tess_InstantQuad( *gl_fxaaShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); GL_CheckErrors(); } @@ -3324,26 +3240,14 @@ static void ComputeTonemapParams( const float contrast, const float highlightsCo ) * darkAreaPointLDR ); } -void RB_CameraPostFX() -{ - matrix_t ortho; - +void RB_CameraPostFX() { GLimp_LogComment( "--- RB_CameraPostFX ---\n" ); if ( ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) || - backEnd.viewParms.portalLevel > 0 ) - { + backEnd.viewParms.portalLevel > 0 ) { return; } - // set 2D virtual screen size - GL_PushMatrix(); - MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, - backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, - backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, - -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); - GL_State( GLS_DEPTHTEST_DISABLE ); GL_Cull( cullType_t::CT_TWO_SIDED ); @@ -3372,18 +3276,11 @@ void RB_CameraPostFX() GL_BindToTMU( 0, tr.currentRenderImage[backEnd.currentMainFBO] ) ); - if ( glConfig2.colorGrading ) - { + if ( glConfig2.colorGrading ) { gl_cameraEffectsShader->SetUniform_ColorMap3DBindless( GL_BindToTMU( 3, tr.colorGradeImage ) ); } - // draw viewport - Tess_InstantQuad( *gl_cameraEffectsShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - - // go back to 3D - GL_PopMatrix(); + Tess_InstantScreenSpaceQuad(); GL_CheckErrors(); } diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index 8e5e09d948..1cebe2e0ff 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -2821,7 +2821,8 @@ enum class ssaoMode { trRefdef_t refdef; // Generic shapes - drawSurf_t *genericQuad; + drawSurf_t* genericQuad; + drawSurf_t* genericTriangle; bool hasSkybox; bool drawingSky = false; @@ -2834,6 +2835,7 @@ enum class ssaoMode { int frontEndMsec; // not in pc due to clearing issue bool skipSubgroupProfiler = false; + bool skipVBO = false; vec4_t clipRegion; // 2D clipping region @@ -3547,6 +3549,7 @@ inline bool checkGLErrors() void Tess_AddCubeWithNormals( const vec3_t position, const vec3_t minSize, const vec3_t maxSize, const Color::Color& color ); class u_ModelViewProjectionMatrix; + void Tess_InstantScreenSpaceQuad(); void Tess_InstantQuad( u_ModelViewProjectionMatrix &shader, float x, float y, float width, float height ); void Tess_MapVBOs( bool forceCPU ); diff --git a/src/engine/renderer/tr_shade.cpp b/src/engine/renderer/tr_shade.cpp index 27ba657617..969b64e3ed 100644 --- a/src/engine/renderer/tr_shade.cpp +++ b/src/engine/renderer/tr_shade.cpp @@ -537,7 +537,7 @@ void Tess_DrawElements() } // move tess data through the GPU, finally - if ( glState.currentVBO && glState.currentIBO ) + if ( ( glState.currentVBO || tr.skipVBO ) && glState.currentIBO ) { if ( tess.multiDrawPrimitives ) { diff --git a/src/engine/renderer/tr_surface.cpp b/src/engine/renderer/tr_surface.cpp index f00abb7e4e..f8e5f1812c 100644 --- a/src/engine/renderer/tr_surface.cpp +++ b/src/engine/renderer/tr_surface.cpp @@ -167,7 +167,7 @@ static void Tess_SurfaceVertsAndTris( const srfVert_t *verts, const srfTriangle_ static bool Tess_SurfaceVBO( VBO_t *vbo, IBO_t *ibo, int numIndexes, int firstIndex ) { - if ( !vbo || !ibo ) + if ( ( !vbo && !tr.skipVBO ) || !ibo ) { return false; } @@ -534,12 +534,22 @@ void Tess_AddCubeWithNormals( const vec3_t position, const vec3_t minSize, const Tess_AddQuadStamp2WithNormals( quadVerts, color ); } +void Tess_InstantScreenSpaceQuad() { + GLimp_LogComment( "--- Tess_InstantScreenSpaceQuad ---\n" ); + + tr.skipVBO = true; + + Tess_Begin( Tess_StageIteratorDummy, nullptr, nullptr, true, -1, 0 ); + rb_surfaceTable[Util::ordinal( *( tr.genericTriangle->surface ) )]( tr.genericTriangle->surface ); + Tess_DrawElements(); + + tr.skipVBO = false; + + GL_CheckErrors(); + + Tess_Clear(); +} -/* -============== -Tess_InstantQuad -============== -*/ void Tess_InstantQuad( u_ModelViewProjectionMatrix &shader, const float x, const float y, const float width, const float height ) { GLimp_LogComment( "--- Tess_InstantQuad ---\n" ); diff --git a/src/engine/renderer/tr_vbo.cpp b/src/engine/renderer/tr_vbo.cpp index 97a928f018..f627e6d119 100644 --- a/src/engine/renderer/tr_vbo.cpp +++ b/src/engine/renderer/tr_vbo.cpp @@ -485,9 +485,12 @@ R_BindVBO */ void R_BindVBO( VBO_t *vbo ) { - if ( !vbo ) - { - Sys::Drop( "R_BindNullVBO: NULL vbo" ); + if ( !vbo ) { + if ( tr.skipVBO ) { + R_BindNullVBO(); + } else { + Sys::Drop( "R_BindNullVBO: NULL vbo" ); + } } if ( r_logFile->integer ) @@ -578,64 +581,86 @@ static void R_InitGenericVBOs() { // Min and max coordinates of the quad static const vec3_t min = { 0.0f, 0.0f, 0.0f }; static const vec3_t max = { 1.0f, 1.0f, 0.0f }; - /* - Quad is a static mesh with 4 vertices and 2 triangles - - z - ^ - | 1------2 - | y | | - | / | | - | / | | - |/ 0------3 - 0---------->x - Verts: - 0: 0.0 0.0 0.0 - 1: 0.0 1.0 0.0 - 2: 1.0 1.0 0.0 - 3: 1.0 0.0 0.0 - Surfs: - 0: 0 2 1 / 0 3 2 - */ - - drawSurf_t* genericQuad; - genericQuad = ( drawSurf_t* ) ri.Hunk_Alloc( sizeof( *genericQuad ), ha_pref::h_low ); - genericQuad->entity = &tr.worldEntity; - srfVBOMesh_t* surface; - surface = ( srfVBOMesh_t* ) ri.Hunk_Alloc( sizeof( *surface ), ha_pref::h_low ); - surface->surfaceType = surfaceType_t::SF_VBO_MESH; - surface->numVerts = 4; - surface->numIndexes = 6; - surface->firstIndex = 0; - - vec3_t verts[ 4 ] = { - { min[0], min[1], min[2] }, - { min[0], max[1], min[2] }, - { max[0], max[1], min[2] }, - { max[0], min[1], min[2] }, - }; + { + /* + Quad is a static mesh with 4 vertices and 2 triangles + + z + ^ + | 1------2 + | y | | + | / | | + | / | | + |/ 0------3 + 0---------->x + Verts: + 0: 0.0 0.0 0.0 + 1: 0.0 1.0 0.0 + 2: 1.0 1.0 0.0 + 3: 1.0 0.0 0.0 + Surfs: + 0: 0 2 1 / 0 3 2 + */ + + drawSurf_t* genericQuad; + genericQuad = ( drawSurf_t* ) ri.Hunk_Alloc( sizeof( *genericQuad ), ha_pref::h_low ); + genericQuad->entity = &tr.worldEntity; + srfVBOMesh_t* surface; + surface = ( srfVBOMesh_t* ) ri.Hunk_Alloc( sizeof( *surface ), ha_pref::h_low ); + surface->surfaceType = surfaceType_t::SF_VBO_MESH; + surface->numVerts = 4; + surface->numIndexes = 6; + surface->firstIndex = 0; + + vec3_t verts[4] = { + { min[0], min[1], min[2] }, + { min[0], max[1], min[2] }, + { max[0], max[1], min[2] }, + { max[0], min[1], min[2] }, + }; + + vec2_t texCoords[4]; + for ( int i = 0; i < 4; i++ ) { + texCoords[i][0] = i < 2 ? 0.0f : 1.0f; + texCoords[i][1] = i > 0 && i < 3 ? 1.0f : 0.0f; + } + + Color::Color32Bit color = Color::White; - vec2_t texCoords[ 4 ]; - for ( int i = 0; i < 4; i++ ) { - texCoords[ i ][ 0 ] = i < 2 ? 0.0f : 1.0f; - texCoords[ i ][ 1 ] = i > 0 && i < 3 ? 1.0f : 0.0f; + vertexAttributeSpec_t attrs[] = { + { ATTR_INDEX_POSITION, GL_FLOAT, GL_FLOAT, verts, 3, sizeof( vec3_t ), 0 }, + { ATTR_INDEX_COLOR, GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE, color.ToArray(), 4, 0, ATTR_OPTION_NORMALIZE }, + { ATTR_INDEX_TEXCOORD, GL_FLOAT, GL_HALF_FLOAT, texCoords, 2, sizeof( vec2_t ), 0 }, + }; + surface->vbo = R_CreateStaticVBO( "genericQuad_VBO", std::begin( attrs ), std::end( attrs ), surface->numVerts ); + + glIndex_t indexes[6] = { 0, 2, 1, 0, 3, 2 }; // Front + + surface->ibo = R_CreateStaticIBO( "genericQuad_IBO", indexes, surface->numIndexes ); + genericQuad->surface = ( surfaceType_t* ) surface; + + tr.genericQuad = genericQuad; } - Color::Color32Bit color = Color::White; + { + drawSurf_t* genericTriangle; + genericTriangle = ( drawSurf_t* ) ri.Hunk_Alloc( sizeof( *genericTriangle ), ha_pref::h_low ); + genericTriangle->entity = &tr.worldEntity; + srfVBOMesh_t* surface = ( srfVBOMesh_t* ) ri.Hunk_Alloc( sizeof( *surface ), ha_pref::h_low ); + surface->surfaceType = surfaceType_t::SF_VBO_MESH; + surface->numVerts = 0; + surface->numIndexes = 3; + surface->firstIndex = 0; - vertexAttributeSpec_t attrs[] = { - { ATTR_INDEX_POSITION, GL_FLOAT, GL_FLOAT, verts, 3, sizeof( vec3_t ), 0 }, - { ATTR_INDEX_COLOR, GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE, color.ToArray(), 4, 0, ATTR_OPTION_NORMALIZE }, - { ATTR_INDEX_TEXCOORD, GL_FLOAT, GL_HALF_FLOAT, texCoords, 2, sizeof( vec2_t ), 0 }, - }; - surface->vbo = R_CreateStaticVBO( "generic_VBO", std::begin( attrs ), std::end( attrs ), surface->numVerts ); + surface->vbo = nullptr; - glIndex_t indexes[6] = { 0, 2, 1, 0, 3, 2 }; // Front + glIndex_t indexes[6] = { 0, 2, 1 }; // Front - surface->ibo = R_CreateStaticIBO( "generic_IBO", indexes, surface->numIndexes ); - genericQuad->surface = ( surfaceType_t* ) surface; + surface->ibo = R_CreateStaticIBO( "genericTriangle_IBO", indexes, surface->numIndexes ); + genericTriangle->surface = ( surfaceType_t* ) surface; - tr.genericQuad = genericQuad; + tr.genericTriangle = genericTriangle; + } } static void R_InitTileVBO()