made work in emscripten, and fixed transparency bug in shader

This commit is contained in:
DaniTheSkunk 2023-01-08 09:58:57 +00:00
parent 5e041ffbf0
commit 75f83bf3f6
6 changed files with 20 additions and 19 deletions

View File

@ -9,7 +9,7 @@ void init() {
sprites[1].x = 10; sprites[1].x = 10;
sprites[1].y = 100; sprites[1].y = 100;
maps[0].tiles[20][1] = 2; maps[0].tiles[20][1] = 1;
} }
void tick() { void tick() {

BIN
gfx.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -62,11 +62,12 @@ add_project_arguments('-Wall', language : 'c')
add_project_arguments('-Wextra', language : 'c') add_project_arguments('-Wextra', language : 'c')
add_project_arguments('-Werror', language : 'c') add_project_arguments('-Werror', language : 'c')
lib = static_library('skunkworks', skunk_sources, include_directories: 'include', dependencies: deps)
if host_machine.system() == 'emscripten' if host_machine.system() == 'emscripten'
executable('skunktest', skunk_sources, include_directories: 'include', dependencies: deps, link_args: ['-lglfw', '-lGL', '-s', 'USE_GLFW=3'], name_suffix: 'html') executable('skunktest', link_with: lib, include_directories: 'include', dependencies: deps, link_args: ['-lglfw', '-lGL', '-s', 'USE_GLFW=3'], name_suffix: 'html')
executable('gsa', 'examples/gsa_simple.c', embed_gfx, link_with: lib, include_directories: 'include', dependencies: deps, link_args: ['-lglfw', '-lGL', '-s', 'USE_GLFW=3', '-s', 'ALLOW_MEMORY_GROWTH', '-s', 'FULL_ES3'], name_suffix: 'html')
else else
lib = static_library('skunkworks', skunk_sources, include_directories: 'include', dependencies: deps)
executable('skunktest', 'src/test.c', link_with: lib, include_directories: 'include', dependencies: deps) executable('skunktest', 'src/test.c', link_with: lib, include_directories: 'include', dependencies: deps)
executable('gsa', 'examples/gsa_simple.c', embed_gfx, link_with: lib, include_directories: 'include', dependencies: deps) executable('gsa', 'examples/gsa_simple.c', embed_gfx, link_with: lib, include_directories: 'include', dependencies: deps)
endif endif

View File

@ -15,25 +15,28 @@ struct gsa_map maps[MAX_TILEMAPS];
struct sw_image8 *_gfx; struct sw_image8 *_gfx;
struct sw_window *_win; struct sw_window *_win;
static char *vert_source = "#version 450\n\ static char *vert_source = "#version 300 es\n\
precision highp float;\
in vec2 pos;\ in vec2 pos;\
in vec2 tex_coord;\ in vec2 tex_coord;\
layout(location = 0) out vec2 out_tex_coord;\ out vec2 out_tex_coord;\
void main() {\ void main() {\
gl_Position = vec4((pos / vec2(152, -88)) - vec2(1, -1), 0.f, 1.f);\ gl_Position = vec4((pos / vec2(152, -88)) - vec2(1, -1), 0.f, 1.f);\
out_tex_coord = tex_coord;\ out_tex_coord = tex_coord;\
}\ }\
"; ";
static char *frag_source = "#version 450\n\ static char *frag_source = "#version 300 es\n\
layout(location = 0) in vec2 tex_coord;\ precision highp float;\
in vec2 out_tex_coord;\
uniform sampler2D tex;\ uniform sampler2D tex;\
uniform vec4 palette[256];\ uniform vec4 palette[256];\
out vec4 color;\ out vec4 color;\
void main(){\ void main(){\
int r = int(texture(tex, tex_coord).r * 255);\ int r = int(texture(tex, out_tex_coord).r * 255.f);\
if(r > 0)\ if(r > 0)\
color = palette[r];\ color = palette[r];\
else discard;\
}\ }\
"; ";
@ -56,7 +59,6 @@ int gsa_main(int argc, char *argv[]) {
(void)argc; (void)argc;
(void)argv; (void)argv;
u32 tex; u32 tex;
struct sw_image8 *img;
i32 max_components; i32 max_components;
sw_log("Initialising GameSkunkAdvance v0.0"); sw_log("Initialising GameSkunkAdvance v0.0");
@ -68,9 +70,8 @@ int gsa_main(int argc, char *argv[]) {
glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &max_components); glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &max_components);
sw_log("GL_MAX_VERTEX_UNIFORM_COMPONENTS: %i", max_components); sw_log("GL_MAX_VERTEX_UNIFORM_COMPONENTS: %i", max_components);
img = sw_image8_load_png("gfx.png"); memcpy(palette, _gfx->palette, sizeof(_gfx->palette));
memcpy(palette, img->palette, sizeof(img->palette)); sw_debug("%08X", _gfx->palette[1]);
sw_debug("%08X", img->palette[1]);
glGenTextures(1, &tex); glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex); glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@ -78,15 +79,14 @@ int gsa_main(int argc, char *argv[]) {
glTexImage2D( glTexImage2D(
GL_TEXTURE_2D, GL_TEXTURE_2D,
0, 0,
GL_RED, GL_R8,
4096, 4096,
4096, 4096,
0, 0,
GL_RED, GL_RED,
GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE,
img->_data _gfx->_data
); );
sw_image8_destroy(img);
glGenBuffers(1, &vao); glGenBuffers(1, &vao);
glBindVertexArray(vao); glBindVertexArray(vao);

View File

@ -7,7 +7,7 @@
#include "png.h" #include "png.h"
#include "vec2i.h" #include "vec2i.h"
void png_read_fn(png_structp png, png_bytep out, png_size_t count); static void png_read_fn(png_structp png, png_bytep out, png_size_t count);
struct sw_image32 *sw_image32_create(struct sw_vec2i size) { struct sw_image32 *sw_image32_create(struct sw_vec2i size) {
struct sw_image32 *image; struct sw_image32 *image;
@ -103,7 +103,7 @@ sw_color32 sw_image32_get(struct sw_image32 *image, struct sw_vec2i pos) {
/* private */ /* private */
void png_read_fn(png_structp png, png_bytep out, png_size_t count) { static void png_read_fn(png_structp png, png_bytep out, png_size_t count) {
struct sw_filebuffer *buf; struct sw_filebuffer *buf;
buf = png_get_io_ptr(png); buf = png_get_io_ptr(png);

View File

@ -8,7 +8,7 @@
#include "png.h" #include "png.h"
#include "vec2i.h" #include "vec2i.h"
void png_read_fn(png_structp png, png_bytep out, png_size_t count); static void png_read_fn(png_structp png, png_bytep out, png_size_t count);
struct sw_image8 *sw_image8_create(struct sw_vec2i size) { struct sw_image8 *sw_image8_create(struct sw_vec2i size) {
struct sw_image8 *image; struct sw_image8 *image;
@ -117,7 +117,7 @@ sw_color8 sw_image8_get(struct sw_image8 *image, struct sw_vec2i pos) {
/* private */ /* private */
void png_read_fn(png_structp png, png_bytep out, png_size_t count) { static void png_read_fn(png_structp png, png_bytep out, png_size_t count) {
struct sw_filebuffer *buf; struct sw_filebuffer *buf;
buf = png_get_io_ptr(png); buf = png_get_io_ptr(png);