citra-emu
/
citra
Archived
1
0
Fork 0

Merge pull request #81 from yuriks/downgrade-shader

Downgrade GLSL version to 1.50 (compatible with GL 3.2)
This commit is contained in:
bunnei 2014-08-28 12:10:40 -04:00
commit 7122c46937
3 changed files with 15 additions and 10 deletions

View File

@ -7,9 +7,9 @@
namespace GLShaders { namespace GLShaders {
static const char g_vertex_shader[] = R"( static const char g_vertex_shader[] = R"(
#version 330 core #version 150 core
layout(location = 0) in vec3 position; in vec3 position;
layout(location = 1) in vec2 texCoord; in vec2 texCoord;
out vec2 UV; out vec2 UV;
@ -27,7 +27,7 @@ void main() {
})"; })";
static const char g_fragment_shader[] = R"( static const char g_fragment_shader[] = R"(
#version 330 core #version 150 core
in vec2 UV; in vec2 UV;
out vec3 color; out vec3 color;
uniform sampler2D sampler; uniform sampler2D sampler;

View File

@ -155,6 +155,8 @@ void RendererOpenGL::RenderXFB(const common::Rect& src_rect, const common::Rect&
void RendererOpenGL::InitFramebuffer() { void RendererOpenGL::InitFramebuffer() {
program_id = ShaderUtil::LoadShaders(GLShaders::g_vertex_shader, GLShaders::g_fragment_shader); program_id = ShaderUtil::LoadShaders(GLShaders::g_vertex_shader, GLShaders::g_fragment_shader);
sampler_id = glGetUniformLocation(program_id, "sampler"); sampler_id = glGetUniformLocation(program_id, "sampler");
attrib_position = glGetAttribLocation(program_id, "position");
attrib_texcoord = glGetAttribLocation(program_id, "texCoord");
// Generate vertex buffers for both screens // Generate vertex buffers for both screens
glGenBuffers(1, &screen_info.Top().vertex_buffer_id); glGenBuffers(1, &screen_info.Top().vertex_buffer_id);
@ -197,8 +199,8 @@ void RendererOpenGL::RenderFramebuffer() {
// Bind texture in Texture Unit 0 // Bind texture in Texture Unit 0
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
glEnableVertexAttribArray(0); glEnableVertexAttribArray(attrib_position);
glEnableVertexAttribArray(1); glEnableVertexAttribArray(attrib_texcoord);
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
@ -216,15 +218,15 @@ void RendererOpenGL::RenderFramebuffer() {
const GLvoid* uv_offset = (const GLvoid*)(3 * sizeof(GLfloat)); const GLvoid* uv_offset = (const GLvoid*)(3 * sizeof(GLfloat));
// Configure vertex buffer // Configure vertex buffer
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, stride, NULL); glVertexAttribPointer(attrib_position, 3, GL_FLOAT, GL_FALSE, stride, NULL);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, stride, uv_offset); glVertexAttribPointer(attrib_texcoord, 2, GL_FLOAT, GL_FALSE, stride, uv_offset);
// Draw screen // Draw screen
glDrawArrays(GL_TRIANGLES, 0, 6); glDrawArrays(GL_TRIANGLES, 0, 6);
} }
glDisableVertexAttribArray(0); glDisableVertexAttribArray(attrib_position);
glDisableVertexAttribArray(1); glDisableVertexAttribArray(attrib_texcoord);
m_current_frame++; m_current_frame++;
} }

View File

@ -85,6 +85,9 @@ private:
GLuint vertex_array_id; GLuint vertex_array_id;
GLuint program_id; GLuint program_id;
GLuint sampler_id; GLuint sampler_id;
// Shader attribute input indices
GLuint attrib_position;
GLuint attrib_texcoord;
struct : std::array<ScreenInfo, 2> { struct : std::array<ScreenInfo, 2> {
ScreenInfo& Top() { return (*this)[0]; } ScreenInfo& Top() { return (*this)[0]; }