Browse Source

Merge pull request #583 from Ragora/bugfix-opengl-errors-during-load

* [OpenGL] BugFix: Correct shader errors being thrown during load
Brian Roberts 4 years ago
parent
commit
c2d5df4c86

+ 1 - 1
Engine/source/gfx/gl/gfxGLDevice.cpp

@@ -933,7 +933,7 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type )
 }
 GFXShader* GFXGLDevice::createShader()
 {
-   GFXGLShader* shader = new GFXGLShader();
+   GFXGLShader* shader = new GFXGLShader(this);
    shader->registerResourceWithDevice( this );
    return shader;
 }

+ 5 - 3
Engine/source/gfx/gl/gfxGLShader.cpp

@@ -382,10 +382,11 @@ void GFXGLShaderConstBuffer::onShaderReload( GFXGLShader *shader )
    mWasLost = true;
 }
 
-GFXGLShader::GFXGLShader() :
+GFXGLShader::GFXGLShader(GFXGLDevice* device) :
    mVertexShader(0),
    mPixelShader(0),
    mProgram(0),
+   mDevice(device),
    mConstBufferSize(0),
    mConstBuffer(NULL)
 {
@@ -706,7 +707,8 @@ void GFXGLShader::initHandles()
    dMemset(mConstBuffer, 0, mConstBufferSize);
    
    // Set our program so uniforms are assigned properly.
-   glUseProgram(mProgram);
+   mDevice->setShader(this, false);
+
    // Iterate through uniforms to set sampler numbers.
    for (HandleMap::Iterator iter = mHandles.begin(); iter != mHandles.end(); ++iter)
    {
@@ -723,7 +725,6 @@ void GFXGLShader::initHandles()
          dMemcpy(mConstBuffer + handle->mOffset, &handle->mSamplerNum, handle->getSize());
       }
    }
-   glUseProgram(0);
 
    //instancing
    if (!mInstancingFormat)
@@ -830,6 +831,7 @@ void GFXGLShader::setConstantsFromBuffer(GFXGLShaderConstBuffer* buffer)
          
       // Copy new value into our const buffer and set in GL.
       dMemcpy(mConstBuffer + handle->mOffset, buffer->mBuffer + handle->mOffset, handle->getSize());
+
       switch(handle->mDesc.constType)
       {
          case GFXSCT_Float:

+ 4 - 2
Engine/source/gfx/gl/gfxGLShader.h

@@ -32,14 +32,15 @@
 class GFXGLShaderConstHandle;
 class FileStream;
 class GFXGLShaderConstBuffer;
+class GFXGLDevice;
 
 class GFXGLShader : public GFXShader
 {
    typedef Map<String, GFXGLShaderConstHandle*> HandleMap;
 public:
-   GFXGLShader();
+   GFXGLShader(GFXGLDevice* device);
    virtual ~GFXGLShader();
-   
+
    /// @name GFXShader interface
    /// @{
    virtual GFXShaderConstHandle* getShaderConstHandle(const String& name);
@@ -99,6 +100,7 @@ protected:
    U32 mConstBufferSize;
    U8* mConstBuffer;
    HandleMap mHandles;
+   GFXGLDevice* mDevice;
    Vector<GFXGLShaderConstHandle*> mValidHandles;
 };