diff --git a/src/graphics/gl_headers.hpp b/src/graphics/gl_headers.hpp index 1368efc75..c291c9dfa 100644 --- a/src/graphics/gl_headers.hpp +++ b/src/graphics/gl_headers.hpp @@ -42,7 +42,6 @@ extern "C" { # endif #elif defined(ANDROID_DEVICE) || defined(USE_GLES2) # include -# include # include # include # define glVertexAttribDivisorARB glVertexAttribDivisor diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index ccc69b14a..149a69da1 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -76,11 +76,13 @@ public: GLuint m_dest_tu; ComputeShadowBlurVShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "blurshadowV.comp"); m_dest_tu = 1; assignUniforms("pixel", "weights"); assignSamplerNames(0, "source", ST_NEARED_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeShadowBlurVShader }; // ComputeShadowBlurVShader @@ -137,11 +139,13 @@ public: GLuint m_dest_tu; ComputeGaussian6VBlurShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "gaussian6v.comp"); m_dest_tu = 1; assignUniforms("pixel", "weights"); assignSamplerNames(0, "source", ST_BILINEAR_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeGaussian6VBlurShader }; // ComputeGaussian6VBlurShader @@ -154,11 +158,13 @@ public: GLuint m_dest_tu; ComputeGaussian6HBlurShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "gaussian6h.comp"); m_dest_tu = 1; assignUniforms("pixel", "weights"); assignSamplerNames(0, "source", ST_BILINEAR_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeGaussian6HBlurShader }; // ComputeGaussian6HBlurShader @@ -171,11 +177,13 @@ public: GLuint m_dest_tu; ComputeShadowBlurHShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "blurshadowH.comp"); m_dest_tu = 1; assignUniforms("pixel", "weights"); assignSamplerNames(0, "source", ST_NEARED_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeShadowBlurHShader }; // ComputeShadowBlurHShader @@ -234,17 +242,20 @@ public: GLuint m_dest_tu; ComputeGaussian17TapHShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "bilateralH.comp"); m_dest_tu = 2; assignUniforms("pixel"); assignSamplerNames(0, "source", ST_NEARED_CLAMPED_FILTERED, 1, "depth", ST_NEARED_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeGaussian17TapHShader // ------------------------------------------------------------------------ void render(const FrameBuffer &fb, const FrameBuffer &auxiliary, int width, int height) { +#if !defined(USE_GLES2) && !defined(ANDROID) use(); glBindSampler(m_dest_tu, 0); setTextureUnits(fb.getRTT()[0], @@ -253,6 +264,7 @@ public: 0, GL_WRITE_ONLY, GL_R16F); setUniforms(core::vector2df(1.0f/width, 1.0f/height)); glDispatchCompute((int)width / 8 + 1, (int)height / 8 + 1, 1); +#endif } // render }; // ComputeGaussian17TapHShader @@ -290,17 +302,20 @@ public: ComputeGaussian17TapVShader() { +#if !defined(USE_GLES2) && !defined(ANDROID) loadProgram(OBJECT, GL_COMPUTE_SHADER, "bilateralV.comp"); m_dest_tu = 2; assignUniforms("pixel"); assignSamplerNames(0, "source", ST_NEARED_CLAMPED_FILTERED, 1, "depth", ST_NEARED_CLAMPED_FILTERED); assignTextureUnit(m_dest_tu, "dest"); +#endif } // ComputeGaussian17TapVShader // ------------------------------------------------------------------------ void render(const FrameBuffer &auxiliary, const FrameBuffer &fb, int width, int height) { +#if !defined(USE_GLES2) && !defined(ANDROID) use(); glBindSampler(m_dest_tu, 0); setTextureUnits(auxiliary.getRTT()[0], @@ -310,6 +325,7 @@ public: setUniforms(core::vector2df(1.0f/width, 1.0f/height)); glDispatchCompute((int)fb.getWidth() / 8 + 1, (int)fb.getHeight() / 8 + 1, 1); +#endif } // render }; // ComputeGaussian17TapVShader @@ -1114,10 +1130,8 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, { GLuint layer_tex; glGenTextures(1, &layer_tex); -#ifndef ANDROID_DEVICE glTextureView(layer_tex, GL_TEXTURE_2D, in_fbo.getRTT()[0], GL_R32F, 0, 1, layer, 1); -#endif if (!CVS->supportsComputeShadersFiltering()) { // Used as temp @@ -1132,6 +1146,7 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, UserConfigParams::m_shadows_resolution, UserConfigParams::m_shadows_resolution, sigma_h); } +#if !defined(USE_GLES2) && !defined(ANDROID) else { const std::vector &weightsV = getGaussianWeight(sigma_v, 7); @@ -1166,6 +1181,7 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, (int)UserConfigParams::m_shadows_resolution / 8 + 1, 1); glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); } +#endif glDeleteTextures(1, &layer_tex); } // renderGaussian6BlurLayer @@ -1191,6 +1207,7 @@ void PostProcessing::renderGaussian6Blur(const FrameBuffer &in_fbo, Gaussian6HBlurShader::getInstance()->render(auxiliary, in_fbo.getWidth(), in_fbo.getHeight(), sigma_h); } +#if !defined(USE_GLES2) && !defined(ANDROID) else { const std::vector &weightsV = getGaussianWeight(sigma_v, 7); @@ -1223,6 +1240,7 @@ void PostProcessing::renderGaussian6Blur(const FrameBuffer &in_fbo, (int)in_fbo.getHeight() / 8 + 1, 1); glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); } +#endif } // renderGaussian6Blur @@ -1248,8 +1266,12 @@ void PostProcessing::renderGaussian17TapBlur(const FrameBuffer &in_fbo, { assert(in_fbo.getWidth() == auxiliary.getWidth() && in_fbo.getHeight() == auxiliary.getHeight()); + +#if !defined(USE_GLES2) && !defined(ANDROID) if (CVS->supportsComputeShadersFiltering()) glMemoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT); +#endif + { if (!CVS->supportsComputeShadersFiltering()) { @@ -1266,8 +1288,12 @@ void PostProcessing::renderGaussian17TapBlur(const FrameBuffer &in_fbo, in_fbo.getHeight()); } } + +#if !defined(USE_GLES2) && !defined(ANDROID) if (CVS->supportsComputeShadersFiltering()) glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); +#endif + { if (!CVS->supportsComputeShadersFiltering()) { @@ -1284,8 +1310,11 @@ void PostProcessing::renderGaussian17TapBlur(const FrameBuffer &in_fbo, in_fbo.getHeight()); } } + +#if !defined(USE_GLES2) && !defined(ANDROID) if (CVS->supportsComputeShadersFiltering()) glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); +#endif } // renderGaussian17TapBlur // ---------------------------------------------------------------------------- diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index d3886f220..a972429b5 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -687,6 +687,7 @@ void IrrDriver::renderGlow(std::vector& glows) if (CVS->supportsIndirectInstancingRendering()) { +#if !defined(ANDROID) && !defined(USE_GLES2) glBindBuffer(GL_DRAW_INDIRECT_BUFFER, GlowPassCmd::getInstance()->drawindirectcmd); InstancedColorizeShader::getInstance()->use(); @@ -695,12 +696,10 @@ void IrrDriver::renderGlow(std::vector& glows) { if (GlowPassCmd::getInstance()->Size) { -#if !defined(ANDROID) && !defined(USE_GLES2) glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)(GlowPassCmd::getInstance()->Offset * sizeof(DrawElementsIndirectCommand)), (int)GlowPassCmd::getInstance()->Size, sizeof(DrawElementsIndirectCommand)); -#endif } } else @@ -708,6 +707,7 @@ void IrrDriver::renderGlow(std::vector& glows) for (unsigned i = 0; i < ListInstancedGlow::getInstance()->size(); i++) glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((GlowPassCmd::getInstance()->Offset + i) * sizeof(DrawElementsIndirectCommand))); } +#endif } glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index af3e48563..3235da4a1 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -962,7 +962,6 @@ using namespace RenderGeometry; template void draw(const T *Shader, const GLMesh *mesh, uniforms... Args) { -#ifndef ANDROID irr_driver->IncreaseObjectCount(); GLenum ptype = mesh->PrimitiveType; GLenum itype = mesh->IndexType; @@ -972,7 +971,6 @@ void draw(const T *Shader, const GLMesh *mesh, uniforms... Args) glDrawElementsBaseVertex(ptype, (int)count, itype, (GLvoid *)mesh->vaoOffset, (int)mesh->vaoBaseVertex); -#endif } // draw // ---------------------------------------------------------------------------- @@ -1113,6 +1111,7 @@ void renderMeshes1stPass() template void renderInstancedMeshes1stPass(Args...args) { +#if !defined(ANDROID) && !defined(USE_GLES2) std::vector &meshes = T::InstancedList::getInstance()->SolidPass; T::InstancedFirstPassShader::getInstance()->use(); glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, T::Instance)); @@ -1133,6 +1132,7 @@ void renderInstancedMeshes1stPass(Args...args) T::InstancedFirstPassShader::getInstance()->setUniforms(args...); glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((SolidPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); } +#endif } // renderInstancedMeshes1stPass // ---------------------------------------------------------------------------- @@ -1160,8 +1160,10 @@ void IrrDriver::renderSolidFirstPass() { windDir = getWindDir(); +#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->supportsIndirectInstancingRendering()) glBindBuffer(GL_DRAW_INDIRECT_BUFFER, SolidPassCmd::getInstance()->drawindirectcmd); +#endif { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); @@ -1179,6 +1181,7 @@ void IrrDriver::renderSolidFirstPass() renderMeshes1stPass(); renderMeshes1stPass(); +#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->isAZDOEnabled()) { multidraw1stPass(); @@ -1200,6 +1203,7 @@ void IrrDriver::renderSolidFirstPass() renderInstancedMeshes1stPass(); renderInstancedMeshes1stPass(); } +#endif } } // renderSolidFirstPass @@ -1246,6 +1250,7 @@ void renderMeshes2ndPass( const std::vector &Prefilled_Handle, template void renderInstancedMeshes2ndPass(const std::vector &Prefilled_tex, Args...args) { +#if !defined(ANDROID) && !defined(USE_GLES2) std::vector &meshes = T::InstancedList::getInstance()->SolidPass; T::InstancedSecondPassShader::getInstance()->use(); glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, @@ -1261,6 +1266,7 @@ void renderInstancedMeshes2ndPass(const std::vector &Prefilled_tex, Args (const void*)((SolidPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); } +#endif } // renderInstancedMeshes2ndPass // ---------------------------------------------------------------------------- @@ -1319,7 +1325,9 @@ void IrrDriver::renderSolidSecondPass() if (!glIsTextureHandleResidentARB(DepthHandle)) glMakeTextureHandleResidentARB(DepthHandle); } +#endif +#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->supportsIndirectInstancingRendering()) glBindBuffer(GL_DRAW_INDIRECT_BUFFER, SolidPassCmd::getInstance()->drawindirectcmd); @@ -1378,9 +1386,7 @@ void IrrDriver::renderSolidSecondPass() } } } - else -#endif - if (CVS->supportsIndirectInstancingRendering()) + else if (CVS->supportsIndirectInstancingRendering()) { renderInstancedMeshes2ndPass(DiffSpecSSAOTex); renderInstancedMeshes2ndPass(DiffSpecSSAOTex); @@ -1393,10 +1399,8 @@ void IrrDriver::renderSolidSecondPass() { std::vector &meshes = GrassMat::InstancedList::getInstance()->SolidPass; GrassMat::InstancedSecondPassShader::getInstance()->use(); -#ifndef ANDROID glBindVertexArray(VAOManager::getInstance() ->getInstanceVAO(GrassMat::VertexType, GrassMat::Instance)); -#endif for (unsigned i = 0; i < meshes.size(); i++) { GLMesh *mesh = meshes[i]; @@ -1406,14 +1410,13 @@ void IrrDriver::renderSolidSecondPass() irr_driver->getDepthStencilTexture()); GrassMat::InstancedSecondPassShader::getInstance() ->setUniforms(windDir, irr_driver->getSunDirection()); -#ifndef ANDROID glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((SolidPassCmd::getInstance()->Offset[GrassMat::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); -#endif } } } +#endif } } // renderSolidSecondPass @@ -1421,6 +1424,7 @@ void IrrDriver::renderSolidSecondPass() template static void renderInstancedMeshNormals() { +#if !defined(ANDROID) && !defined(USE_GLES2) std::vector &meshes = T::InstancedList::getInstance()->SolidPass; NormalVisualizer::getInstance()->use(); glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, T::Instance)); @@ -1431,6 +1435,7 @@ static void renderInstancedMeshNormals() (const void*)((SolidPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); } +#endif } // renderInstancedMeshNormals // ---------------------------------------------------------------------------- @@ -1454,6 +1459,7 @@ static void renderMultiMeshNormals() // ---------------------------------------------------------------------------- void IrrDriver::renderNormalsVisualisation() { +#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->isAZDOEnabled()) { renderMultiMeshNormals(); renderMultiMeshNormals(); @@ -1471,6 +1477,7 @@ void IrrDriver::renderNormalsVisualisation() renderInstancedMeshNormals(); renderInstancedMeshNormals(); } +#endif } // renderNormalsVisualisation // ---------------------------------------------------------------------------- @@ -1510,8 +1517,6 @@ static video::ITexture *displaceTex = 0; // ---------------------------------------------------------------------------- void IrrDriver::renderTransparent() { - -#ifndef ANDROID glEnable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); glEnable(GL_BLEND); @@ -1645,15 +1650,12 @@ void IrrDriver::renderTransparent() irr_driver->getFBO(FBO_COLORS).getWidth(), irr_driver->getFBO(FBO_COLORS).getHeight()); glDisable(GL_STENCIL_TEST); - -#endif } // renderTransparent // ---------------------------------------------------------------------------- template void drawShadow(const T *Shader, unsigned cascade, const GLMesh *mesh, uniforms... Args) { -#ifndef ANDROID irr_driver->IncreaseObjectCount(); GLenum ptype = mesh->PrimitiveType; GLenum itype = mesh->IndexType; @@ -1662,7 +1664,6 @@ void drawShadow(const T *Shader, unsigned cascade, const GLMesh *mesh, uniforms. Shader->setUniforms(cascade, Args...); glDrawElementsBaseVertex(ptype, (int)count, itype, (GLvoid *)mesh->vaoOffset, (int)mesh->vaoBaseVertex); -#endif } // drawShadow // ---------------------------------------------------------------------------- @@ -1715,6 +1716,7 @@ void renderShadow(unsigned cascade) template void renderInstancedShadow(unsigned cascade, Args ...args) { +#if !defined(ANDROID) && !defined(USE_GLES2) T::InstancedShadowPassShader::getInstance()->use(); glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, InstanceTypeShadow)); @@ -1731,7 +1733,7 @@ void renderInstancedShadow(unsigned cascade, Args ...args) (const void*)((tmp) * sizeof(DrawElementsIndirectCommand))); } // for i - +#endif } // renderInstancedShadow // ---------------------------------------------------------------------------- @@ -1892,6 +1894,7 @@ void drawRSM(const core::matrix4 & rsm_matrix) template void renderRSMShadow(Args ...args) { +#if !defined(ANDROID) && !defined(USE_GLES2) T::InstancedRSMShader::getInstance()->use(); glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, InstanceTypeRSM)); auto t = T::InstancedList::getInstance()->RSM; @@ -1906,6 +1909,7 @@ void renderRSMShadow(Args ...args) (const void*)((RSMPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); } +#endif } // renderRSMShadow // ---------------------------------------------------------------------------- @@ -1945,6 +1949,7 @@ void IrrDriver::renderRSM() drawRSM(rsm_matrix); drawRSM(rsm_matrix); +#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->supportsIndirectInstancingRendering()) glBindBuffer(GL_DRAW_INDIRECT_BUFFER, RSMPassCmd::getInstance()->drawindirectcmd); @@ -1965,5 +1970,7 @@ void IrrDriver::renderRSM() renderRSMShadow(rsm_matrix); renderRSMShadow(rsm_matrix); } +#endif + getShadowMatrices()->setRSMMapAvail(true); } // renderRSM diff --git a/src/graphics/shader.cpp b/src/graphics/shader.cpp index 42c5c0d17..75b0cf049 100644 --- a/src/graphics/shader.cpp +++ b/src/graphics/shader.cpp @@ -72,6 +72,7 @@ GLuint ShaderBase::loadShader(const std::string &file, unsigned type) code << "#version 300 es\n"; #endif +#if !defined(USE_GLES2) && !defined(ANDROID) // Some drivers report that the compute shaders extension is available, // but they report only OpenGL 3.x version, and thus these extensions // must be enabled manually. Otherwise the shaders compilation will fail @@ -86,6 +87,7 @@ GLuint ShaderBase::loadShader(const std::string &file, unsigned type) if (CVS->isARBArraysOfArraysUsable()) code << "#extension GL_ARB_arrays_of_arrays : enable\n"; } +#endif if (CVS->isAMDVertexShaderLayerUsable()) code << "#extension GL_AMD_vertex_shader_layer : enable\n"; diff --git a/src/graphics/shadow_matrices.cpp b/src/graphics/shadow_matrices.cpp index fa423c9bb..0a526819e 100644 --- a/src/graphics/shadow_matrices.cpp +++ b/src/graphics/shadow_matrices.cpp @@ -222,6 +222,7 @@ core::matrix4 ShadowMatrices::getTighestFitOrthoProj(const core::matrix4 &transf void ShadowMatrices::updateSplitAndLightcoordRangeFromComputeShaders(unsigned int width, unsigned int height) { +#if !defined(USE_GLES2) && !defined(ANDROID) struct CascadeBoundingBox { int xmin; @@ -284,6 +285,7 @@ void ShadowMatrices::updateSplitAndLightcoordRangeFromComputeShaders(unsigned in SharedGPUObjects::getViewProjectionMatricesUBO()); glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 80 * sizeof(float), 4 * 16 * sizeof(float)); +#endif } // updateSplitAndLightcoordRangeFromComputeShaders // ---------------------------------------------------------------------------- diff --git a/src/graphics/stk_scene_manager.cpp b/src/graphics/stk_scene_manager.cpp index f9e735524..b7e277e9b 100644 --- a/src/graphics/stk_scene_manager.cpp +++ b/src/graphics/stk_scene_manager.cpp @@ -692,10 +692,12 @@ PROFILER_POP_CPU_MARKER(); size_t offset = 0, current_cmd = 0; if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glBindBuffer(GL_ARRAY_BUFFER, VAOManager::getInstance()->getInstanceBuffer(InstanceTypeDualTex)); InstanceBufferDualTex = (InstanceDataDualTex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, 10000 * sizeof(InstanceDataDualTex), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); glBindBuffer(GL_DRAW_INDIRECT_BUFFER, SolidPassCmd::getInstance()->drawindirectcmd); CmdBuffer = (DrawElementsIndirectCommand*)glMapBufferRange(GL_DRAW_INDIRECT_BUFFER, 0, 10000 * sizeof(DrawElementsIndirectCommand), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); +#endif } @@ -740,8 +742,10 @@ PROFILER_POP_CPU_MARKER(); if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glUnmapBuffer(GL_ARRAY_BUFFER); glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER); +#endif } } #pragma omp section @@ -750,10 +754,12 @@ PROFILER_POP_CPU_MARKER(); if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glBindBuffer(GL_ARRAY_BUFFER, VAOManager::getInstance()->getInstanceBuffer(InstanceTypeGlow)); GlowInstanceBuffer = (GlowInstanceData*)glMapBufferRange(GL_ARRAY_BUFFER, 0, 10000 * sizeof(InstanceDataDualTex), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); glBindBuffer(GL_DRAW_INDIRECT_BUFFER, GlowPassCmd::getInstance()->drawindirectcmd); GlowCmdBuffer = (DrawElementsIndirectCommand*)glMapBufferRange(GL_DRAW_INDIRECT_BUFFER, 0, 10000 * sizeof(DrawElementsIndirectCommand), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); +#endif } // Glow @@ -774,8 +780,10 @@ PROFILER_POP_CPU_MARKER(); if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glUnmapBuffer(GL_ARRAY_BUFFER); glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER); +#endif } } #pragma omp section @@ -785,10 +793,12 @@ PROFILER_POP_CPU_MARKER(); size_t offset = 0, current_cmd = 0; if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glBindBuffer(GL_ARRAY_BUFFER, VAOManager::getInstance()->getInstanceBuffer(InstanceTypeShadow)); ShadowInstanceBuffer = (InstanceDataSingleTex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, 10000 * sizeof(InstanceDataDualTex), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); glBindBuffer(GL_DRAW_INDIRECT_BUFFER, ShadowPassCmd::getInstance()->drawindirectcmd); ShadowCmdBuffer = (DrawElementsIndirectCommand*)glMapBufferRange(GL_DRAW_INDIRECT_BUFFER, 0, 10000 * sizeof(DrawElementsIndirectCommand), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); +#endif } for (unsigned i = 0; i < 4; i++) @@ -810,8 +820,10 @@ PROFILER_POP_CPU_MARKER(); } if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glUnmapBuffer(GL_ARRAY_BUFFER); glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER); +#endif } } #pragma omp section @@ -820,10 +832,12 @@ PROFILER_POP_CPU_MARKER(); size_t offset = 0, current_cmd = 0; if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glBindBuffer(GL_ARRAY_BUFFER, VAOManager::getInstance()->getInstanceBuffer(InstanceTypeRSM)); RSMInstanceBuffer = (InstanceDataSingleTex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, 10000 * sizeof(InstanceDataDualTex), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); glBindBuffer(GL_DRAW_INDIRECT_BUFFER, RSMPassCmd::getInstance()->drawindirectcmd); RSMCmdBuffer = (DrawElementsIndirectCommand*)glMapBufferRange(GL_DRAW_INDIRECT_BUFFER, 0, 10000 * sizeof(DrawElementsIndirectCommand), GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); +#endif } // Default Material @@ -849,8 +863,10 @@ PROFILER_POP_CPU_MARKER(); if (!CVS->supportsAsyncInstanceUpload()) { +#if !defined(USE_GLES2) && !defined(ANDROID) glUnmapBuffer(GL_ARRAY_BUFFER); glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER); +#endif } } } diff --git a/src/graphics/stk_scene_manager.hpp b/src/graphics/stk_scene_manager.hpp index ac29719a8..949baa5be 100644 --- a/src/graphics/stk_scene_manager.hpp +++ b/src/graphics/stk_scene_manager.hpp @@ -37,11 +37,9 @@ public: DrawElementsIndirectCommand *Ptr; CommandBuffer() { +#if !defined(ANDROID) && !defined(USE_GLES2) glGenBuffers(1, &drawindirectcmd); -#if !defined(ANDROID) && !defined(USE_GLES2) glBindBuffer(GL_DRAW_INDIRECT_BUFFER, drawindirectcmd); -#endif -#if !defined(ANDROID) && !defined(USE_GLES2) if (CVS->supportsAsyncInstanceUpload()) { glBufferStorage(GL_DRAW_INDIRECT_BUFFER, 10000 * sizeof(DrawElementsIndirectCommand), 0, GL_MAP_PERSISTENT_BIT | GL_MAP_WRITE_BIT); @@ -49,9 +47,7 @@ public: } else { -#endif glBufferData(GL_DRAW_INDIRECT_BUFFER, 10000 * sizeof(DrawElementsIndirectCommand), 0, GL_STREAM_DRAW); -#if !defined(ANDROID) && !defined(USE_GLES2) } #endif }