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

* [OpenGL] BugFix: Correct shader errors being thrown during load
This commit is contained in:
Brian Roberts 2021-09-19 01:57:04 -05:00 committed by GitHub
commit c2d5df4c86
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 6 deletions

View file

@ -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;
}

View file

@ -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:

View file

@ -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;
};