Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. static void render_rectangle_bitmap(PictureBuffer* screen, Rect rect,Rect subrect,Vec4 color)
  2. {
  3. glEnable(GL_TEXTURE_2D);
  4. glMatrixMode(GL_TEXTURE);
  5. glLoadIdentity()
  6.  
  7.  
  8. glBindTexture(GL_TEXTURE_2D,(GLuint)screen->handle );
  9.  
  10. Vec2 lower_left=vec2f(rect.startx,rect.starty);
  11. Vec2 upper_left=vec2f(rect.startx,rect.endy);
  12. Vec2 upper_right= vec2f(rect.endx,rect.endy);
  13. Vec2 lower_right= vec2f(rect.endx,rect.starty);
  14.  
  15. glBegin(GL_TRIANGLES);
  16. glColor4fv(color.xyzw);
  17.  
  18. glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.endy);
  19. glVertex2fv(upper_left.E);
  20. glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.endy);
  21. glVertex2fv(upper_right.E);
  22. glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.starty);
  23. glVertex2fv(lower_right.E);
  24. glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.endy);
  25. glVertex2fv(upper_left.E);
  26. glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.starty);
  27. glVertex2fv(lower_right.E);
  28. glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.starty);
  29. glVertex2fv(lower_left.E);
  30.  
  31. glEnd();
  32. glBindTexture(GL_TEXTURE_2D,0 );
  33. }
  34.  
  35. void prepare_using_bitmap(PictureBuffer* screen)
  36. {
  37. glEnable(GL_TEXTURE_2D);
  38. glMatrixMode(GL_TEXTURE);
  39. glLoadIdentity();
  40. glGenTextures(1,(GLuint*)&screen->handle);
  41. glBindTexture(GL_TEXTURE_2D,(GLuint)screen->handle );
  42.  
  43. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );
  44. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR );
  45. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP );
  46. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP );
  47.  
  48. glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
  49. glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,screen->pitch,screen->height, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,screen->picture);
  50.  
  51. glBindTexture(GL_TEXTURE_2D,0 );
  52. }
  53.  
  54. static void render_rectangle(Rect rect,Vec4 color)
  55. {
  56. glBegin(GL_TRIANGLES);
  57. glColor4fv(color.xyzw);
  58.  
  59. Vec2 lower_left=vec2f(rect.start.x,rect.end.y);
  60. Vec2 upper_left=vec2f(rect.start.x,rect.start.y);
  61. Vec2 upper_right=vec2f(rect.end.x,rect.start.y);
  62. Vec2 lower_right=vec2f(rect.end.x,rect.end.y);
  63. glVertex2fv(upper_left.E);
  64. glVertex2fv(upper_right.E);
  65. glVertex2fv(lower_right.E);
  66.  
  67. glVertex2fv(upper_left.E);
  68. glVertex2fv(lower_right.E);
  69. glVertex2fv(lower_left.E);
  70. glEnd();
  71. }
  72.  
  73.  
  74. void render(...)
  75. {
  76. ....
  77. case render_label_rect:
  78. {
  79. delta=sizeof(Render_rect_info);
  80. Assert(not_in_font);
  81. Render_rect_info* rect=(Render_rect_info*) header;
  82. render_rectangle(rect->rect,rect->color);
  83. }break;
  84.  
  85. case render_label_bitmap_subrect:
  86. {
  87. delta=sizeof(Render_bitmap_subrect_info);
  88. Render_bitmap_subrect_info* bitmap=(Render_bitmap_subrect_info*) header;
  89. Assert(not_in_font);
  90. if(!bitmap->screen->handle)
  91. {
  92. prepare_using_bitmap(bitmap->screen);
  93. }
  94. render_rectangle_bitmap(bitmap->screen, bitmap->rect,bitmap->subrect,bitmap->color);
  95. break;
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement