Cleaned up sprite render; use UVs
This commit is contained in:
parent
0bdfa9e814
commit
804c2de617
|
@ -30,11 +30,6 @@ void font_init(struct shader *textshader) {
|
||||||
shader_use(shader);
|
shader_use(shader);
|
||||||
|
|
||||||
glGenBuffers(1, &VBO);
|
glGenBuffers(1, &VBO);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
|
|
||||||
|
|
||||||
|
|
||||||
// Default font
|
// Default font
|
||||||
//font = MakeFont("teenytinypixels.ttf", 30);
|
//font = MakeFont("teenytinypixels.ttf", 30);
|
||||||
|
@ -157,7 +152,6 @@ void renderText(const char *text, mfloat_t pos[2], float scale, mfloat_t color[3
|
||||||
glBindTexture(GL_TEXTURE_2D, font->texID);
|
glBindTexture(GL_TEXTURE_2D, font->texID);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
glBufferData(GL_ARRAY_BUFFER, len*16*sizeof(float), NULL, GL_STREAM_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, len*16*sizeof(float), NULL, GL_STREAM_DRAW);
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
|
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
|
||||||
|
|
||||||
const unsigned char *line, *wordstart;
|
const unsigned char *line, *wordstart;
|
||||||
|
|
|
@ -28,7 +28,7 @@ struct sFont {
|
||||||
uint32_t texID;
|
uint32_t texID;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct glrect runit = { 0.f, 1.f, 0.f, 1.f };
|
||||||
|
|
||||||
void font_init(struct shader *s);
|
void font_init(struct shader *s);
|
||||||
void font_frame(struct window *w);
|
void font_frame(struct window *w);
|
||||||
|
|
|
@ -11,12 +11,13 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "stb_ds.h"
|
#include "stb_ds.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "font.h"
|
||||||
|
|
||||||
struct TextureOptions TEX_SPRITE = { 1, 0, 0 };
|
struct TextureOptions TEX_SPRITE = { 1, 0, 0 };
|
||||||
|
|
||||||
struct sprite *sprites;
|
struct sprite *sprites;
|
||||||
|
|
||||||
static uint32_t quadVAO;
|
static uint32_t VBO;
|
||||||
|
|
||||||
struct sprite *make_sprite(struct gameobject *go)
|
struct sprite *make_sprite(struct gameobject *go)
|
||||||
{
|
{
|
||||||
|
@ -111,29 +112,12 @@ unsigned int incrementAnimFrame(unsigned int interval, struct sprite *sprite)
|
||||||
// TODO: This should be done once for all sprites
|
// TODO: This should be done once for all sprites
|
||||||
void sprite_initialize()
|
void sprite_initialize()
|
||||||
{
|
{
|
||||||
uint32_t VBO;
|
|
||||||
float vertices[] = {
|
|
||||||
// pos
|
|
||||||
0.f, 0.f,
|
|
||||||
0.0f, 1.0f,
|
|
||||||
1.f, 0.f,
|
|
||||||
1.f, 1.f
|
|
||||||
};
|
|
||||||
|
|
||||||
glGenVertexArrays(1, &quadVAO);
|
|
||||||
glGenBuffers(1, &VBO);
|
glGenBuffers(1, &VBO);
|
||||||
|
|
||||||
glBindVertexArray(quadVAO);
|
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tex_draw(struct Texture *tex, float pos[2], float angle, float size[2], float offset[2]) {
|
|
||||||
|
|
||||||
|
void tex_draw(struct Texture *tex, float pos[2], float angle, float size[2], float offset[2], struct glrect r) {
|
||||||
mfloat_t model[16] = { 0.f };
|
mfloat_t model[16] = { 0.f };
|
||||||
mfloat_t r_model[16] = { 0.f };
|
mfloat_t r_model[16] = { 0.f };
|
||||||
mfloat_t s_model[16] = { 0.f };
|
mfloat_t s_model[16] = { 0.f };
|
||||||
|
@ -157,11 +141,20 @@ void tex_draw(struct Texture *tex, float pos[2], float angle, float size[2], flo
|
||||||
shader_setmat4(spriteShader, "model", model);
|
shader_setmat4(spriteShader, "model", model);
|
||||||
shader_setvec3(spriteShader, "spriteColor", white);
|
shader_setvec3(spriteShader, "spriteColor", white);
|
||||||
|
|
||||||
//tex_bind(sprite->tex);
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, tex->id);
|
glBindTexture(GL_TEXTURE_2D, tex->id);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
|
||||||
|
float vertices[] = {
|
||||||
|
0.f, 0.f, r.s0, r.t1,
|
||||||
|
1.f, 0.f, r.s1, r.t1,
|
||||||
|
0.f, 1.f, r.s0, r.t0,
|
||||||
|
1.f, 1.f, r.s1, r.t0
|
||||||
|
};
|
||||||
|
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW);
|
||||||
|
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
|
||||||
glBindVertexArray(quadVAO);
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +166,7 @@ void sprite_draw(struct sprite *sprite)
|
||||||
|
|
||||||
float size[2] = { sprite->size[0] * sprite->go->scale, sprite->size[1] * sprite->go->scale };
|
float size[2] = { sprite->size[0] * sprite->go->scale, sprite->size[1] * sprite->go->scale };
|
||||||
|
|
||||||
tex_draw(sprite->tex, pos, cpBodyGetAngle(sprite->go->body), size, sprite->pos);
|
tex_draw(sprite->tex, pos, cpBodyGetAngle(sprite->go->body), size, sprite->pos, tex_get_rect(sprite->tex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +176,7 @@ void gui_draw_img(const char *img, float x, float y) {
|
||||||
float pos[2] = {x, y};
|
float pos[2] = {x, y};
|
||||||
float size[2] = {1.f, 1.f};
|
float size[2] = {1.f, 1.f};
|
||||||
float offset[2] = { 0.f, 0.f };
|
float offset[2] = { 0.f, 0.f };
|
||||||
tex_draw(tex, pos, 0.f, size, offset);
|
tex_draw(tex, pos, 0.f, size, offset, tex_get_rect(tex));
|
||||||
}
|
}
|
||||||
|
|
||||||
void spriteanim_draw(struct sprite *sprite)
|
void spriteanim_draw(struct sprite *sprite)
|
||||||
|
@ -207,7 +200,6 @@ void spriteanim_draw(struct sprite *sprite)
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D_ARRAY, sprite->tex->id);
|
glBindTexture(GL_TEXTURE_2D_ARRAY, sprite->tex->id);
|
||||||
|
|
||||||
glBindVertexArray(quadVAO);
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +224,6 @@ void video_draw(struct datastream *stream, mfloat_t position[2], mfloat_t size[2
|
||||||
glBindTexture(GL_TEXTURE_2D, stream->texture_cr);
|
glBindTexture(GL_TEXTURE_2D, stream->texture_cr);
|
||||||
|
|
||||||
// TODO: video bind VAO
|
// TODO: video bind VAO
|
||||||
glBindVertexArray(quadVAO);
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,6 +195,26 @@ void tex_anim_calc_uv(struct TexAnimation *anim)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct glrect tex_get_rect(struct Texture *tex)
|
||||||
|
{
|
||||||
|
if (tex->opts.animation) {
|
||||||
|
/*
|
||||||
|
tex_anim_calc_uv(tex->anim);
|
||||||
|
struct glrect ret;
|
||||||
|
|
||||||
|
ret.s0 = tex->anim.uv.x;
|
||||||
|
ret.s1 = tex->anim.uv.x + tex->anim.uv.w;
|
||||||
|
ret.t0 = tex->anim.uv.y;
|
||||||
|
ret.t1 = tex->anim.uv.y + tex->anim.uv.h;
|
||||||
|
*/
|
||||||
|
return runit;
|
||||||
|
} else {
|
||||||
|
return runit;
|
||||||
|
}
|
||||||
|
|
||||||
|
return runit;
|
||||||
|
}
|
||||||
|
|
||||||
void tex_bind(struct Texture *tex)
|
void tex_bind(struct Texture *tex)
|
||||||
{
|
{
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define TEXTURE_H
|
#define TEXTURE_H
|
||||||
|
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
#include "font.h"
|
||||||
|
|
||||||
#define TEX_SPEC 0
|
#define TEX_SPEC 0
|
||||||
#define TEX_NORM 1
|
#define TEX_NORM 1
|
||||||
|
@ -75,7 +76,7 @@ void tex_incr_anim(struct TexAnimation *tex_anim);
|
||||||
void tex_anim_calc_uv(struct TexAnimation *anim);
|
void tex_anim_calc_uv(struct TexAnimation *anim);
|
||||||
void tex_anim_set(struct TexAnimation *anim);
|
void tex_anim_set(struct TexAnimation *anim);
|
||||||
|
|
||||||
|
struct glrect tex_get_rect(struct Texture *tex);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
layout (location = 0) in vec2 vertex;
|
layout (location = 0) in vec4 vertex;
|
||||||
out vec2 texcoords;
|
out vec2 texcoords;
|
||||||
|
|
||||||
layout (std140) uniform Projection
|
layout (std140) uniform Projection
|
||||||
|
@ -11,7 +11,6 @@ uniform mat4 model;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
texcoords = vertex.xy;
|
texcoords = vertex.zw;
|
||||||
texcoords.y *= -1;
|
|
||||||
gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
|
gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
|
||||||
}
|
}
|
Loading…
Reference in a new issue