Просмотр исходного кода

Rebind uniforms as well if shader binding changes (ex. a global material)

Ivan Safrin 10 лет назад
Родитель
Сommit
7d03421607
2 измененных файлов с 11 добавлено и 8 удалено
  1. 8 8
      src/core/PolyRenderer.cpp
  2. 3 0
      src/ide/PolycodeEntityEditor.cpp

+ 8 - 8
src/core/PolyRenderer.cpp

@@ -199,11 +199,18 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
                     }
                 }
                 
+                bool rebindAttributes = false;
+                
+                if(localShaderBinding->targetShader != shaderPass.shader) {
+                    localShaderBinding->targetShader = shaderPass.shader;
+                    rebindAttributes = true;
+                }
+                
                 for(int p=0; p < localShaderBinding->getNumLocalParams(); p++) {
                     
                     LocalShaderParam *localParam = localShaderBinding->getLocalParam(p);
                     if(localParam) {
-                        if(!localParam->param) {
+                        if(!localParam->param || rebindAttributes) {
                             localParam->param = shaderPass.shader->getParamPointer(localParam->name);
                         }
                         if(localParam->param) {
@@ -214,13 +221,6 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
                     
                 }
                 
-                bool rebindAttributes = false;
-                
-                if(localShaderBinding->targetShader != shaderPass.shader) {
-                    localShaderBinding->targetShader = shaderPass.shader;
-                    rebindAttributes = true;
-                }
-                
                 
                 for(int a=0; a < localShaderBinding->getNumAttributeBindings(); a++) {
                     

+ 3 - 0
src/ide/PolycodeEntityEditor.cpp

@@ -993,6 +993,9 @@ void EntityEditorMainView::fixedUpdate() {
             Vector2 screenPos = parentEntity->getScreenPosition(mainScene->getDefaultCamera()->getProjectionMatrix(), mainScene->getDefaultCamera()->getConcatenatedMatrix().Inverse(), mainScene->getDefaultCamera()->getViewport());
             
             icons[i]->setPosition(screenPos.x, (mainScene->getDefaultCamera()->getViewport().h - screenPos.y) + 30);
+            
+            // RENDERER_TODO:
+            // check if icon is behind the camera and hide it now that the icons are in screenspace
 
         }
     }