Changeset 1483 for trunk/neercs/video/render.cpp
- Timestamp:
- Jun 16, 2012, 5:16:54 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/neercs/video/render.cpp
r1482 r1483 41 41 #define DEBUG 1 // debug flag //#if defined(_DEBUG) 42 42 #define SHADER 1 // shader flag 43 #define FUCK 1 // test flag44 43 #define PID M_PI/180.0f // pi ratio 45 44 #define CR 1.0f/256.0f // color ratio … … 165 164 shader_postfx_sync; 166 165 167 FrameBuffer *fbo_ back, *fbo_front, *fbo_blur_h, *fbo_blur_v;168 FrameBuffer *fbo_ ping, *fbo_pong;166 FrameBuffer *fbo_text, *fbo_back, *fbo_front; 167 FrameBuffer *fbo_blur_h, *fbo_blur_v, *fbo_ping, *fbo_pong; 169 168 #endif 170 169 … … 181 180 for (int j = 0; j < m_height; j++) 182 181 for (int i = 0; i < m_width; i++) 183 m_vertices << vec2( 5.1 / 128.0 * i - 0.91, 0.75 - 0.0525 *j);182 m_vertices << vec2(i, j); 184 183 } 185 184 … … 194 193 VertexUsage::Color, 1); 195 194 m_texture = m_shader->GetUniformLocation("in_Texture"); 195 m_transform = m_shader->GetUniformLocation("in_Transform"); 196 196 m_vdecl 197 197 = new VertexDeclaration(VertexStream<vec2>(VertexUsage::Position), … … 208 208 } 209 209 210 void Blit() 211 { 210 void Blit(ivec2 screen_size, ivec2 font_size) 211 { 212 /* Transform matrix for the scene: 213 * - translate to the centre of the glyph 214 * - scale by 2.f * font_size / screen_size 215 * - translate to the upper left corner */ 216 mat4 xform = mat4::translate(-1.f, 1.f, 0.f) 217 * mat4::scale(vec3(2.f * font_size / (screen_size), 1.f) 218 * vec3(1.f, -1.f, 1.f)) 219 * mat4::translate(0.5f, 0.5f, 0.f); 220 221 /* Upload libcaca canvas contents to the vertex buffers */ 212 222 uint32_t *colors = (uint32_t *)m_vbo2->Lock(0, 0); 213 223 for (int j = 0; j < m_height; j++) … … 234 244 //glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); 235 245 glDisable(GL_POINT_SMOOTH); 236 glPointSize( 16.f);246 glPointSize((float)max(font_size.x, font_size.y)); 237 247 m_shader->Bind(); 238 248 tex_map->Bind(); 239 249 m_shader->SetUniform(m_texture, 0); 250 m_shader->SetUniform(m_transform, xform); 240 251 m_vdecl->SetStream(m_vbo1, m_coord); 241 252 m_vdecl->SetStream(m_vbo2, m_color); … … 256 267 Shader *m_shader; 257 268 ShaderAttrib m_coord, m_color, m_char; 258 ShaderUniform m_texture ;269 ShaderUniform m_texture, m_transform; 259 270 VertexDeclaration *m_vdecl; 260 271 VertexBuffer *m_vbo1, *m_vbo2, *m_vbo3; … … 379 390 if (shader_flag) 380 391 { 392 fbo_text = new FrameBuffer(screen_size); 381 393 fbo_back = new FrameBuffer(screen_size); 382 394 fbo_front = new FrameBuffer(screen_size); … … 533 545 { 534 546 #if SHADER 547 /* Draw text in an offline buffer */ 548 fbo_text->Bind(); 549 text_render->Blit(screen_size, ivec2(8, 8)); 550 fbo_text->Unbind(); 551 #endif 552 553 /* Clear the back buffer */ 554 #if SHADER 535 555 if(shader_flag) 536 556 { … … 546 566 #endif 547 567 548 text_render->Blit(); 568 /* FIXME: when SHADER is true, we should blit the offline 569 * buffer instead, but for some reason it doesn't work yet. */ 570 text_render->Blit(screen_size, ivec2(8, 8)); 549 571 550 572 glEnableClientState(GL_VERTEX_ARRAY); … … 558 580 559 581 init_viewport(1); 582 583 #if 0 584 /* Render text buffer to the current buffer */ 585 glEnable(GL_BLEND); 586 glEnable(GL_TEXTURE_2D); 587 glBlendFunc(GL_ONE, GL_ONE); 588 glVertexPointer(2, GL_INT, 0, shell_vtx); 589 glTexCoordPointer(2, GL_FLOAT, 0, shell_tex); 590 shader_simple->Bind(); 591 shader_simple->SetTexture(shader_simple_texture, fbo_text->GetTexture(), 0); 592 fs_quad(); 593 shader_simple->Unbind(); 594 #endif 560 595 561 596 tex_map->Bind();
Note: See TracChangeset
for help on using the changeset viewer.