mirror of https://github.com/OpenRCT2/OpenRCT2.git
get the fillrect shader working
This commit is contained in:
parent
e7e92f02c1
commit
c48031581b
|
@ -5,7 +5,7 @@ uniform ivec4 uClip;
|
|||
uniform int uFlags;
|
||||
uniform vec4 uColour;
|
||||
|
||||
in ivec2 fPosition;
|
||||
flat in ivec2 fPosition;
|
||||
|
||||
layout (location = 0) out vec4 oColour;
|
||||
|
||||
|
|
|
@ -4,17 +4,17 @@ uniform ivec2 uScreenSize;
|
|||
|
||||
in ivec2 vPosition;
|
||||
|
||||
out ivec2 fPosition;
|
||||
flat out ivec2 fPosition;
|
||||
|
||||
void main()
|
||||
{
|
||||
fPosition = vPosition;
|
||||
|
||||
// Transform screen coordinates to viewport
|
||||
vec2 pos = vPosition;
|
||||
vec2 pos = vec2(vPosition);
|
||||
pos.x = (pos.x * (2.0 / uScreenSize.x)) - 1.0;
|
||||
pos.y = (pos.y * (2.0 / uScreenSize.y)) - 1.0;
|
||||
pos.y *= -1;
|
||||
|
||||
gl_Position = vec4(pos, 0, 1);
|
||||
gl_Position = vec4(pos, 0.0, 1.0);
|
||||
}
|
||||
|
|
|
@ -26,8 +26,10 @@ FillRectShader::FillRectShader() : OpenGLShaderProgram("fillrect")
|
|||
glGenVertexArrays(1, &_vao);
|
||||
|
||||
Use();
|
||||
glVertexAttribPointer(vPosition, 2, GL_INT, GL_FALSE, 0, 0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
|
||||
glBindVertexArray(_vao);
|
||||
glEnableVertexAttribArray(vPosition);
|
||||
glVertexAttribIPointer(vPosition, 2, GL_INT, 0, 0);
|
||||
}
|
||||
|
||||
FillRectShader::~FillRectShader()
|
||||
|
|
|
@ -62,6 +62,7 @@ static const char * TryLoadAllProcAddresses()
|
|||
SetupOpenGLFunction(glEnable);
|
||||
SetupOpenGLFunction(glEnd);
|
||||
SetupOpenGLFunction(glGenTextures);
|
||||
SetupOpenGLFunction(glGetError);
|
||||
SetupOpenGLFunction(glLoadIdentity);
|
||||
SetupOpenGLFunction(glMatrixMode);
|
||||
SetupOpenGLFunction(glOrtho);
|
||||
|
@ -76,6 +77,7 @@ static const char * TryLoadAllProcAddresses()
|
|||
// 2.0+ functions
|
||||
SetupOpenGLFunction(glAttachShader);
|
||||
SetupOpenGLFunction(glBindBuffer);
|
||||
SetupOpenGLFunction(glBindFragDataLocation);
|
||||
SetupOpenGLFunction(glBindVertexArray);
|
||||
SetupOpenGLFunction(glBufferData);
|
||||
SetupOpenGLFunction(glCompileShader);
|
||||
|
@ -89,6 +91,8 @@ static const char * TryLoadAllProcAddresses()
|
|||
SetupOpenGLFunction(glEnableVertexAttribArray);
|
||||
SetupOpenGLFunction(glGetAttribLocation);
|
||||
SetupOpenGLFunction(glGenBuffers);
|
||||
SetupOpenGLFunction(glGetProgramInfoLog);
|
||||
SetupOpenGLFunction(glGetProgramiv);
|
||||
SetupOpenGLFunction(glGetShaderInfoLog);
|
||||
SetupOpenGLFunction(glGetShaderiv);
|
||||
SetupOpenGLFunction(glGetUniformLocation);
|
||||
|
@ -100,7 +104,7 @@ static const char * TryLoadAllProcAddresses()
|
|||
SetupOpenGLFunction(glUniform4f);
|
||||
SetupOpenGLFunction(glUniform4i);
|
||||
SetupOpenGLFunction(glUseProgram);
|
||||
SetupOpenGLFunction(glVertexAttribPointer);
|
||||
SetupOpenGLFunction(glVertexAttribIPointer);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#define glEnable __static__glEnable
|
||||
#define glEnd __static__glEnd
|
||||
#define glGenTextures __static__glGenTextures
|
||||
#define glGetError __static__glGetError
|
||||
#define glLoadIdentity __static__glLoadIdentity
|
||||
#define glMatrixMode __static__glMatrixMode
|
||||
#define glOrtho __static__glOrtho
|
||||
|
@ -63,6 +64,7 @@
|
|||
#undef glEnable
|
||||
#undef glEnd
|
||||
#undef glGenTextures
|
||||
#undef glGetError
|
||||
#undef glLoadIdentity
|
||||
#undef glMatrixMode
|
||||
#undef glOrtho
|
||||
|
@ -75,29 +77,30 @@
|
|||
#undef glViewport
|
||||
|
||||
// 1.1 function signatures
|
||||
typedef void (APIENTRYP PFNGLBEGINPROC )(GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLBINDTEXTUREPROC )(GLenum target, GLuint texture);
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCPROC )(GLenum sfactor, GLenum dfactor);
|
||||
typedef void (APIENTRYP PFNGLCLEARPROC )(GLbitfield mask);
|
||||
typedef void (APIENTRYP PFNGLCLEARCOLORPROC )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
typedef void (APIENTRYP PFNGLCOLOR3FPROC )(GLfloat red, GLfloat green, GLfloat blue);
|
||||
typedef void (APIENTRYP PFNGLCOLOR4FPROC )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||
typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLDISABLEPROC )(GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLDRAWARRAYSPROC )(GLenum mode, GLint first, GLsizei count);
|
||||
typedef void (APIENTRYP PFNGLENABLEPROC )(GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLENDPROC )(void);
|
||||
typedef void (APIENTRYP PFNGLGENTEXTURESPROC )(GLsizei n, GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLLOADIDENTITYPROC )(void);
|
||||
typedef void (APIENTRYP PFNGLMATRIXMODEPROC )(GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLORTHOPROC )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
|
||||
typedef void (APIENTRYP PFNGLSCALEFPROC )(GLfloat x, GLfloat y, GLfloat z);
|
||||
typedef void (APIENTRYP PFNGLTEXCOORD2FPROC )(GLfloat s, GLfloat t);
|
||||
typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC )(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC )(GLenum target, GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLTRANSLATEFPROC )(GLfloat x, GLfloat y, GLfloat z);
|
||||
typedef void (APIENTRYP PFNGLVERTEX2IPROC )(GLint x, GLint y);
|
||||
typedef void (APIENTRYP PFNGLVIEWPORTPROC )(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (APIENTRYP PFNGLBEGINPROC )(GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLBINDTEXTUREPROC )(GLenum target, GLuint texture);
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCPROC )(GLenum sfactor, GLenum dfactor);
|
||||
typedef void (APIENTRYP PFNGLCLEARPROC )(GLbitfield mask);
|
||||
typedef void (APIENTRYP PFNGLCLEARCOLORPROC )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
typedef void (APIENTRYP PFNGLCOLOR3FPROC )(GLfloat red, GLfloat green, GLfloat blue);
|
||||
typedef void (APIENTRYP PFNGLCOLOR4FPROC )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||
typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLDISABLEPROC )(GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLDRAWARRAYSPROC )(GLenum mode, GLint first, GLsizei count);
|
||||
typedef void (APIENTRYP PFNGLENABLEPROC )(GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLENDPROC )(void);
|
||||
typedef GLenum (APIENTRYP PFNGLGETERRORPROC )(void);
|
||||
typedef void (APIENTRYP PFNGLGENTEXTURESPROC )(GLsizei n, GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLLOADIDENTITYPROC )(void);
|
||||
typedef void (APIENTRYP PFNGLMATRIXMODEPROC )(GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLORTHOPROC )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
|
||||
typedef void (APIENTRYP PFNGLSCALEFPROC )(GLfloat x, GLfloat y, GLfloat z);
|
||||
typedef void (APIENTRYP PFNGLTEXCOORD2FPROC )(GLfloat s, GLfloat t);
|
||||
typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC )(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC )(GLenum target, GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLTRANSLATEFPROC )(GLfloat x, GLfloat y, GLfloat z);
|
||||
typedef void (APIENTRYP PFNGLVERTEX2IPROC )(GLint x, GLint y);
|
||||
typedef void (APIENTRYP PFNGLVIEWPORTPROC )(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
|
||||
#ifdef NO_EXTERN_GLAPI
|
||||
// Defines the function pointers
|
||||
|
@ -137,6 +140,7 @@ GLAPI_DECL PFNGLVIEWPORTPROC glViewport GLAP
|
|||
// 2.0+ function pointers
|
||||
GLAPI_DECL PFNGLATTACHSHADERPROC glAttachShader GLAPI_SET;
|
||||
GLAPI_DECL PFNGLBINDBUFFERPROC glBindBuffer GLAPI_SET;
|
||||
GLAPI_DECL PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation GLAPI_SET;
|
||||
GLAPI_DECL PFNGLBINDVERTEXARRAYPROC glBindVertexArray GLAPI_SET;
|
||||
GLAPI_DECL PFNGLBUFFERDATAPROC glBufferData GLAPI_SET;
|
||||
GLAPI_DECL PFNGLCOMPILESHADERPROC glCompileShader GLAPI_SET;
|
||||
|
@ -150,6 +154,9 @@ GLAPI_DECL PFNGLDETACHSHADERPROC glDetachShader GLAP
|
|||
GLAPI_DECL PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGENBUFFERSPROC glGenBuffers GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETERRORPROC glGetError GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETPROGRAMIVPROC glGetProgramiv GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETSHADERIVPROC glGetShaderiv GLAPI_SET;
|
||||
GLAPI_DECL PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation GLAPI_SET;
|
||||
|
@ -161,7 +168,7 @@ GLAPI_DECL PFNGLUNIFORM2IPROC glUniform2i GLAP
|
|||
GLAPI_DECL PFNGLUNIFORM4FPROC glUniform4f GLAPI_SET;
|
||||
GLAPI_DECL PFNGLUNIFORM4IPROC glUniform4i GLAPI_SET;
|
||||
GLAPI_DECL PFNGLUSEPROGRAMPROC glUseProgram GLAPI_SET;
|
||||
GLAPI_DECL PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer GLAPI_SET;
|
||||
GLAPI_DECL PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer GLAPI_SET;
|
||||
|
||||
#endif /* OPENGL_NO_LINK */
|
||||
|
||||
|
|
|
@ -142,8 +142,8 @@ public:
|
|||
|
||||
_drawingContext->Initialise();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// glEnable(GL_BLEND);
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
void Resize(uint32 width, uint32 height) override
|
||||
|
@ -175,15 +175,15 @@ public:
|
|||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glMatrixMode(GL_PROJECTION_MATRIX);
|
||||
glLoadIdentity();
|
||||
glOrtho(0, _width, _height, 0, -1.0, 1.0);
|
||||
// glMatrixMode(GL_PROJECTION_MATRIX);
|
||||
// glLoadIdentity();
|
||||
// glOrtho(0, _width, _height, 0, -1.0, 1.0);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW_MATRIX);
|
||||
glLoadIdentity();
|
||||
glScalef(1, -1.0f, 0);
|
||||
glTranslatef(-1.0f, -1.0f, 0);
|
||||
glScalef(2.0f / _width, 2.0f / _height, 0);
|
||||
// glMatrixMode(GL_MODELVIEW_MATRIX);
|
||||
// glLoadIdentity();
|
||||
// glScalef(1, -1.0f, 0);
|
||||
// glTranslatef(-1.0f, -1.0f, 0);
|
||||
// glScalef(2.0f / _width, 2.0f / _height, 0);
|
||||
|
||||
if (gIntroState != INTRO_STATE_NONE) {
|
||||
intro_draw(&_bitsDPI);
|
||||
|
@ -328,6 +328,14 @@ void OpenGLDrawingContext::FillRect(uint32 colour, sint32 left, sint32 top, sint
|
|||
{
|
||||
vec4f paletteColour = _engine->GLPalette[colour & 0xFF];
|
||||
|
||||
_fillRectShader->Use();
|
||||
_fillRectShader->SetScreenSize(gScreenWidth, gScreenHeight);
|
||||
_fillRectShader->SetColour(paletteColour);
|
||||
_fillRectShader->SetClip(_clipLeft, _clipTop, _clipRight, _clipBottom);
|
||||
_fillRectShader->Draw(left, top, right, bottom);
|
||||
|
||||
return;
|
||||
|
||||
if (left > right)
|
||||
{
|
||||
left ^= right;
|
||||
|
@ -377,6 +385,8 @@ void OpenGLDrawingContext::FillRect(uint32 colour, sint32 left, sint32 top, sint
|
|||
|
||||
void OpenGLDrawingContext::DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2)
|
||||
{
|
||||
return;
|
||||
|
||||
vec4f paletteColour = _engine->GLPalette[colour & 0xFF];
|
||||
glColor3f(paletteColour.r, paletteColour.g, paletteColour.b);
|
||||
glBegin(GL_LINES);
|
||||
|
@ -387,6 +397,8 @@ void OpenGLDrawingContext::DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32
|
|||
|
||||
void OpenGLDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour)
|
||||
{
|
||||
return;
|
||||
|
||||
int g1Id = image & 0x7FFFF;
|
||||
rct_g1_element * g1Element = gfx_get_g1_element(g1Id);
|
||||
|
||||
|
|
|
@ -103,11 +103,22 @@ OpenGLShaderProgram::OpenGLShaderProgram(const char * name)
|
|||
{
|
||||
_vertexShader = new OpenGLShader(name, GL_VERTEX_SHADER);
|
||||
_fragmentShader = new OpenGLShader(name, GL_FRAGMENT_SHADER);
|
||||
_id = glCreateProgram();
|
||||
|
||||
_id = glCreateProgram();
|
||||
glAttachShader(_id, _vertexShader->GetShaderId());
|
||||
glAttachShader(_id, _fragmentShader->GetShaderId());
|
||||
glLinkProgram(_id);
|
||||
|
||||
if (!Link())
|
||||
{
|
||||
char buffer[512];
|
||||
GLsizei length;
|
||||
glGetProgramInfoLog(_id, sizeof(buffer), &length, buffer);
|
||||
|
||||
Console::Error::WriteFormat("Error linking %s\n", name);
|
||||
Console::Error::WriteLine(buffer);
|
||||
|
||||
throw Exception("Failed to link OpenGL shader.");
|
||||
}
|
||||
}
|
||||
|
||||
OpenGLShaderProgram::~OpenGLShaderProgram()
|
||||
|
@ -140,4 +151,13 @@ void OpenGLShaderProgram::Use()
|
|||
glUseProgram(_id);
|
||||
}
|
||||
|
||||
bool OpenGLShaderProgram::Link()
|
||||
{
|
||||
glLinkProgram(_id);
|
||||
|
||||
GLint linkStatus;
|
||||
glGetProgramiv(_id, GL_LINK_STATUS, &linkStatus);
|
||||
return linkStatus == GL_TRUE;
|
||||
}
|
||||
|
||||
#endif /* DISABLE_OPENGL */
|
||||
|
|
|
@ -52,5 +52,8 @@ public:
|
|||
GLuint GetAttributeLocation(const char * name);
|
||||
GLuint GetUniformLocation(const char * name);
|
||||
void Use();
|
||||
|
||||
private:
|
||||
bool Link();
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue