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() GFXShader* GFXGLDevice::createShader()
{ {
GFXGLShader* shader = new GFXGLShader(); GFXGLShader* shader = new GFXGLShader(this);
shader->registerResourceWithDevice( this ); shader->registerResourceWithDevice( this );
return shader; return shader;
} }

View file

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

View file

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