diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 6179bd618..1c82b4e74 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/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; } diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index d2f2edd22..ce8e7c855 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/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: diff --git a/Engine/source/gfx/gl/gfxGLShader.h b/Engine/source/gfx/gl/gfxGLShader.h index 80fa4d9d9..e3d3bb69c 100644 --- a/Engine/source/gfx/gl/gfxGLShader.h +++ b/Engine/source/gfx/gl/gfxGLShader.h @@ -32,14 +32,15 @@ class GFXGLShaderConstHandle; class FileStream; class GFXGLShaderConstBuffer; +class GFXGLDevice; class GFXGLShader : public GFXShader { typedef Map 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 mValidHandles; };