palette drawing :)
This commit is contained in:
parent
3c1908317b
commit
de0e18afa4
BIN
gfx.png
BIN
gfx.png
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
64
src/gsa.c
64
src/gsa.c
|
@ -26,11 +26,12 @@ out_tex_coord = tex_coord;\
|
|||
static char *frag_source = "#version 450\n\
|
||||
layout(location = 0) in vec2 tex_coord;\
|
||||
uniform sampler2D tex;\
|
||||
uniform vec4 palette[256];\
|
||||
out vec4 color;\
|
||||
void main(){\
|
||||
float r = texture(tex, tex_coord).r;\
|
||||
int r = int(texture(tex, tex_coord).r * 255);\
|
||||
if(r > 0)\
|
||||
color = vec4(0.9, 0.2, 0.1, 1.0);\
|
||||
color = palette[r];\
|
||||
}\
|
||||
";
|
||||
|
||||
|
@ -47,12 +48,14 @@ struct render_vert {
|
|||
static i32 next_render_vert;
|
||||
static struct render_vert render_verts[MAX_RENDER_VERTS * 4];
|
||||
static sw_color32 palette[256];
|
||||
static f32 palette_gl[1024];
|
||||
|
||||
int gsa_main(int argc, char *argv[]) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
u32 tex;
|
||||
struct sw_image8 *img;
|
||||
i32 max_components;
|
||||
|
||||
sw_log("Initialising GameSkunkAdvance v0.0");
|
||||
|
||||
|
@ -60,8 +63,12 @@ int gsa_main(int argc, char *argv[]) {
|
|||
program = sw_shaderprogram_create(vert_source, frag_source);
|
||||
sw_shaderprogram_use(program);
|
||||
|
||||
glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &max_components);
|
||||
sw_log("GL_MAX_VERTEX_UNIFORM_COMPONENTS: %i", max_components);
|
||||
|
||||
img = sw_image8_load_png("gfx.png");
|
||||
memcpy(palette, img->palette, sizeof(img->palette));
|
||||
sw_debug("%08X", img->palette[1]);
|
||||
glGenTextures(1, &tex);
|
||||
glBindTexture(GL_TEXTURE_2D, tex);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
@ -139,45 +146,16 @@ static void rect(f32 x, f32 y, f32 w, f32 h, i16 tile) {
|
|||
add_render_vert(x + w, y, tx + ts, ty);
|
||||
add_render_vert(x, y + h, tx, ty + ts);
|
||||
add_render_vert(x + w, y + h, tx + ts, ty + ts);
|
||||
}
|
||||
|
||||
/*
|
||||
render_verts[next_render_vert].x = x;
|
||||
render_verts[next_render_vert].y = y;
|
||||
render_verts[next_render_vert].tx = tx;
|
||||
render_verts[next_render_vert].ty = ty;
|
||||
++next_render_vert;
|
||||
|
||||
render_verts[next_render_vert].x = x + w;
|
||||
render_verts[next_render_vert].y = y;
|
||||
render_verts[next_render_vert].tx = tx + ts;
|
||||
render_verts[next_render_vert].ty = ty;
|
||||
++next_render_vert;
|
||||
|
||||
render_verts[next_render_vert].x = x;
|
||||
render_verts[next_render_vert].y = y + h;
|
||||
render_verts[next_render_vert].tx = tx;
|
||||
render_verts[next_render_vert].ty = ty + ts;
|
||||
++next_render_vert;
|
||||
|
||||
render_verts[next_render_vert].x = x + w;
|
||||
render_verts[next_render_vert].y = y;
|
||||
render_verts[next_render_vert].tx = tx + ts;
|
||||
render_verts[next_render_vert].ty = ty;
|
||||
++next_render_vert;
|
||||
|
||||
render_verts[next_render_vert].x = x;
|
||||
render_verts[next_render_vert].y = y + h;
|
||||
render_verts[next_render_vert].tx = tx;
|
||||
render_verts[next_render_vert].ty = ty + ts;
|
||||
++next_render_vert;
|
||||
|
||||
render_verts[next_render_vert].x = x + w;
|
||||
render_verts[next_render_vert].y = y + h;
|
||||
render_verts[next_render_vert].tx = tx + ts;
|
||||
render_verts[next_render_vert].ty = ty + ts;
|
||||
++next_render_vert;
|
||||
|
||||
*/
|
||||
static void update_palette_gl() {
|
||||
int i;
|
||||
for(i = 0; i < 256; ++i) {
|
||||
palette_gl[i * 4 + 0] = sw_color32_get_rf(palette[i]);
|
||||
palette_gl[i * 4 + 1] = sw_color32_get_gf(palette[i]);
|
||||
palette_gl[i * 4 + 2] = sw_color32_get_bf(palette[i]);
|
||||
palette_gl[i * 4 + 3] = sw_color32_get_af(palette[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void _gsa_tick() {
|
||||
|
@ -198,7 +176,13 @@ void _gsa_tick() {
|
|||
sw_color32_get_bf(palette[0]),
|
||||
sw_color32_get_af(palette[0])
|
||||
);
|
||||
|
||||
glBindVertexArray(vao);
|
||||
/* TODO: only do when palette changed */
|
||||
update_palette_gl();
|
||||
glUniform4fv(
|
||||
glGetUniformLocation(program._program, "palette"), 256, palette_gl
|
||||
);
|
||||
glBufferData(
|
||||
GL_ARRAY_BUFFER,
|
||||
sizeof(struct render_vert) * (next_render_vert),
|
||||
|
|
Loading…
Reference in New Issue