kettek2/wiki/games/newsboy/Newsboy_0x00/engine/render.c

91 lines
2.4 KiB
C

#include "render.h"
#include <SDL2/SDL_opengl.h>
// solid quad
int renderSQuad(int x, int y, int width, int height, SDL_Color color) {
// reset view
glLoadIdentity();
// translate to a quad
glTranslated(x, y, 1.0f);
// colors
float r = (float)color.r / 255.0f;
float g = (float)color.g / 255.0f;
float b = (float)color.b / 255.0f;
float a = (float)color.a / 255.0f;
if (a != 255.0f && a != 0.0f) {
glColor4f(r, g, b, a);
} else {
glColor3f(r, g, b);
}
// unbind textures
glBindTexture(GL_TEXTURE_2D, 0);
// we only want to draw lines
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// draw !
glBegin(GL_QUADS);
// top left
glTexCoord2d(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
// top right
glTexCoord2d(1.0, 0.0f); glVertex2f(width, 0.0f);
// bottom right
glTexCoord2d(1.0f, 1.0f); glVertex2f(width, height);
// bottom left
glTexCoord2d(0.0f, 1.0f); glVertex2f(0.0f, height);
glEnd();
return 0;
}
// outlined quad
int renderLQuad(int x, int y, int width, int height, SDL_Color color) {
// reset view
glLoadIdentity();
// translate to a quad
glTranslated(x, y, 1.0f);
// colors
float r = (float)color.r / 255.0f;
float g = (float)color.g / 255.0f;
float b = (float)color.b / 255.0f;
glColor3f(r, g, b);
// unbind textures
glBindTexture(GL_TEXTURE_2D, 0);
// we only want to draw lines
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
// draw !
glBegin(GL_QUADS);
// top left
glTexCoord2d(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
// top right
glTexCoord2d(1.0, 0.0f); glVertex2f(width, 0.0f);
// bottom right
glTexCoord2d(1.0f, 1.0f); glVertex2f(width, height);
// bottom left
glTexCoord2d(0.0f, 1.0f); glVertex2f(0.0f, height);
glEnd();
return 0;
}
int renderTexture(GLuint texture, int x, int y, int width, int height) {
// make sure we're rendering textures
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// bind our texture
glColor3f(1.0f, 1.0f, 1.0f);
glBindTexture(GL_TEXTURE_2D, texture);
// reset view
glLoadIdentity();
// translate to a quad
glTranslated(x, y, 1.0f);
// draw !
glBegin(GL_QUADS);
// top left
glTexCoord2d(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
// top right
glTexCoord2d(1.0, 0.0f); glVertex2f(width, 0.0f);
// bottom right
glTexCoord2d(1.0f, 1.0f); glVertex2f(width, height);
// bottom left
glTexCoord2d(0.0f, 1.0f); glVertex2f(0.0f, height);
glEnd();
return 0;
}