From 5e0461ffc5dbf9297939944cf78aeaa48f40072a Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 19 Dec 2012 22:16:30 +0000 Subject: [PATCH] neercs: if shaders don't support integer attributes, pass them as vectors of ubytes; foreground colour already works. --- neercs/video/text-render.cpp | 6 +++--- neercs/video/text.lolfx | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/neercs/video/text-render.cpp b/neercs/video/text-render.cpp index 4069d3e..ca4b83a 100644 --- a/neercs/video/text-render.cpp +++ b/neercs/video/text-render.cpp @@ -52,8 +52,8 @@ void TextRender::Init() m_transform = m_shader->GetUniformLocation("u_Transform"); m_datasize = m_shader->GetUniformLocation("u_DataSize"); m_vdecl - = new VertexDeclaration(VertexStream(VertexUsage::Color), - VertexStream(VertexUsage::Color)); + = new VertexDeclaration(VertexStream(VertexUsage::Color), + VertexStream(VertexUsage::Color)); CreateBuffers(); } @@ -61,7 +61,7 @@ void TextRender::Init() void TextRender::CreateBuffers() { m_vbo2 = new VertexBuffer(m_cells * sizeof(int32_t)); - m_vbo3 = new VertexBuffer(m_cells * sizeof(int32_t)); + m_vbo3 = new VertexBuffer(m_cells * sizeof(u8vec4)); m_fbo = new FrameBuffer(m_fbo_size); } diff --git a/neercs/video/text.lolfx b/neercs/video/text.lolfx index ef0dc76..5c047e8 100644 --- a/neercs/video/text.lolfx +++ b/neercs/video/text.lolfx @@ -23,8 +23,10 @@ void main() float u = float(in_Char & 0xfu) / 32.0 + 0.0; float v = float((in_Char >> 4u) & 0xfu) / 32.0 + 0.5; #else - float u = mod(in_Char.x, 16.0) / 32.0 + 0.0; - float v = floor(in_Char.x / 16.0) / 32.0 + 0.5; + vec4 tmp_Char = in_Char * 255.0; + + float u = mod(tmp_Char.x, 16.0) / 32.0 + 0.0; + float v = floor(tmp_Char.x / 16.0) / 32.0 + 0.5; #endif pass_UV = vec2(u, v); @@ -39,15 +41,17 @@ void main() float G = float((in_Attr >> 7u) & 0xfu) / 15.0; float H = float((in_Attr >> 4u) & 0x7u) / 7.0; #else + vec4 tmp_Attr = in_Attr * 255.0; + float A = 0.0; float B = 0.0; float C = 0.0; float D = 0.0; float E = 0.0; - float F = mod(floor(in_Attr.y / 8.0), 16.0) / 15.0; - float G = (mod(in_Attr.y, 8.0) * 2.0 + floor(in_Attr.x / 128.0)) / 15.0; - float H = mod(floor(in_Attr.x / 16.0), 8.0) / 7.0; + float F = mod(floor(tmp_Attr.y / 8.0), 16.0) / 15.0; + float G = (mod(tmp_Attr.y, 8.0) * 2.0 + floor(tmp_Attr.x / 128.0)) / 15.0; + float H = mod(floor(tmp_Attr.x / 16.0), 8.0) / 7.0; #endif pass_Background = vec4(B + 0.0625, C + 0.125, D + 0.125, 1.0 - A);