X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fscreen.cpp;h=dc59de90904d684a6cc378283a1028bdafd783a1;hp=b5b68824008e1ba973921af7576dd7a7e1a86811;hb=3ab3475a54c82cb9f5e0b1dbb88035f341b92d49;hpb=5624689656381779cb43341de284fa928e460e43 diff --git a/src/screen.cpp b/src/screen.cpp index b5b6882..dc59de9 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -22,6 +22,7 @@ static void opengl_debug_callback(GLenum source, GLenum type, GLuint id, GLenum Screen::Screen() { + SDL_Init(SDL_INIT_VIDEO); m_window = SDL_CreateWindow("IPDF", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); @@ -68,17 +69,20 @@ Screen::Screen() glGenVertexArrays(1, &default_vao); glBindVertexArray(default_vao); - //TODO: Error checking. - m_texture_prog.AttachVertexProgram(BASICTEX_VERT); - m_texture_prog.AttachFragmentProgram(BASICTEX_FRAG); - m_texture_prog.Link(); + m_texture_prog.InitialiseShaders(BASICTEX_VERT, BASICTEX_FRAG); m_texture_prog.Use(); // We always want to use the texture bound to texture unit 0. GLint texture_uniform_location = m_texture_prog.GetUniformLocation("tex"); glUniform1i(texture_uniform_location, 0); - m_colour_uniform_location = m_texture_prog.GetUniformLocation("colour"); + m_font_prog.InitialiseShaders(BASICTEX_VERT, "shaders/fonttex_frag.glsl"); + m_font_prog.Use(); + + // We always want to use the texture bound to texture unit 0. + GLint font_texture_uniform_location = m_font_prog.GetUniformLocation("tex"); + glUniform1i(font_texture_uniform_location, 0); + m_colour_uniform_location = m_font_prog.GetUniformLocation("colour"); m_viewport_ubo.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw); m_viewport_ubo.SetType(GraphicsBuffer::BufferTypeUniform); @@ -218,7 +222,7 @@ double Screen::GetLastFrameTimeGPU() const return frame_time_ns/1000000000.0; } -void Screen::RenderPixels(int x, int y, int w, int h, void *pixels) const +void Screen::RenderPixels(int x, int y, int w, int h, uint8_t *pixels) const { GLenum texture_format = GL_RGBA; @@ -226,11 +230,12 @@ void Screen::RenderPixels(int x, int y, int w, int h, void *pixels) const GraphicsBuffer quad_vertex_buffer; quad_vertex_buffer.SetUsage(GraphicsBuffer::BufferUsageStaticDraw); quad_vertex_buffer.SetType(GraphicsBuffer::BufferTypeVertex); + //rectangular texture == 2 triangles GLfloat quad[] = { 0, 0, (float)x, (float)y, - 1, 0, (float)(x+w), y, - 1, 1, (float)(x+w), (float)(y+h), - 0, 1, (float)x, (float)(y+h) + 1, 0, (float)(x+w), (float)y, + 0, 1, (float)x, (float)(y+h), + 1, 1, (float)(x+w), (float)(y+h) }; quad_vertex_buffer.Upload(sizeof(GLfloat) * 16, quad); quad_vertex_buffer.Bind(); @@ -247,15 +252,15 @@ void Screen::RenderPixels(int x, int y, int w, int h, void *pixels) const glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, texture_format, GL_UNSIGNED_BYTE, pixels); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, texture_format, GL_UNSIGNED_BYTE, pixels); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (void*)(2*sizeof(float))); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), 0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableVertexAttribArray(1); glDisableVertexAttribArray(0); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -409,7 +414,7 @@ void Screen::DebugFontFlush() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D, m_debug_font_atlas); - m_texture_prog.Use(); + m_font_prog.Use(); m_viewport_ubo.Bind(); m_debug_font_vertices.Bind(); m_debug_font_indices.Bind();