Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void render_rectangle_bitmap(PictureBuffer* screen, Rect rect,Rect subrect,Vec4 color)
- {
- glEnable(GL_TEXTURE_2D);
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity()
- glBindTexture(GL_TEXTURE_2D,(GLuint)screen->handle );
- Vec2 lower_left=vec2f(rect.startx,rect.starty);
- Vec2 upper_left=vec2f(rect.startx,rect.endy);
- Vec2 upper_right= vec2f(rect.endx,rect.endy);
- Vec2 lower_right= vec2f(rect.endx,rect.starty);
- glBegin(GL_TRIANGLES);
- glColor4fv(color.xyzw);
- glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.endy);
- glVertex2fv(upper_left.E);
- glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.endy);
- glVertex2fv(upper_right.E);
- glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.starty);
- glVertex2fv(lower_right.E);
- glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.endy);
- glVertex2fv(upper_left.E);
- glTexCoord2f(screen->width*subrect.endx/(r32)screen->pitch,subrect.starty);
- glVertex2fv(lower_right.E);
- glTexCoord2f(screen->width*subrect.startx/(r32)screen->pitch,subrect.starty);
- glVertex2fv(lower_left.E);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,0 );
- }
- void prepare_using_bitmap(PictureBuffer* screen)
- {
- glEnable(GL_TEXTURE_2D);
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glGenTextures(1,(GLuint*)&screen->handle);
- glBindTexture(GL_TEXTURE_2D,(GLuint)screen->handle );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP );
- glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,screen->pitch,screen->height, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,screen->picture);
- glBindTexture(GL_TEXTURE_2D,0 );
- }
- static void render_rectangle(Rect rect,Vec4 color)
- {
- glBegin(GL_TRIANGLES);
- glColor4fv(color.xyzw);
- Vec2 lower_left=vec2f(rect.start.x,rect.end.y);
- Vec2 upper_left=vec2f(rect.start.x,rect.start.y);
- Vec2 upper_right=vec2f(rect.end.x,rect.start.y);
- Vec2 lower_right=vec2f(rect.end.x,rect.end.y);
- glVertex2fv(upper_left.E);
- glVertex2fv(upper_right.E);
- glVertex2fv(lower_right.E);
- glVertex2fv(upper_left.E);
- glVertex2fv(lower_right.E);
- glVertex2fv(lower_left.E);
- glEnd();
- }
- void render(...)
- {
- ....
- case render_label_rect:
- {
- delta=sizeof(Render_rect_info);
- Assert(not_in_font);
- Render_rect_info* rect=(Render_rect_info*) header;
- render_rectangle(rect->rect,rect->color);
- }break;
- case render_label_bitmap_subrect:
- {
- delta=sizeof(Render_bitmap_subrect_info);
- Render_bitmap_subrect_info* bitmap=(Render_bitmap_subrect_info*) header;
- Assert(not_in_font);
- if(!bitmap->screen->handle)
- {
- prepare_using_bitmap(bitmap->screen);
- }
- render_rectangle_bitmap(bitmap->screen, bitmap->rect,bitmap->subrect,bitmap->color);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement