Background properly renders

This commit is contained in:
John Alanbrook 2022-06-30 21:38:51 +00:00
parent edf16b4267
commit e96d7fb701
2 changed files with 13 additions and 72 deletions

View file

@ -111,10 +111,10 @@ void sdrawCharacter(struct Character c, mfloat_t cursor[2], float scale, struct
float h = c.Size[1] * scale; float h = c.Size[1] * scale;
float verts[4 * 4] = { float verts[4 * 4] = {
xpos, ypos + h, 0.f, 0.f, xpos, ypos, 0.f, 0.f,
xpos, ypos, 0.f, 1.f, xpos+w, ypos, 1.f, 0.f,
xpos + w, ypos + h, 1.f, 0.f, xpos, ypos + h, 0.f, 1.f,
xpos + w, ypos, 1.f, 1.f xpos + w, ypos+h, 1.f, 1.f
}; };
@ -226,7 +226,9 @@ void renderText(const char *text, mfloat_t pos[2], float scale, mfloat_t color[3
} }
/*
glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0); glBindVertexArray(0);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
*/
} }

View file

@ -41,8 +41,6 @@ struct Texture *texture_pullfromfile(const char *path)
shput(texhash, tex->path, tex); shput(texhash, tex->path, tex);
//glGenTextures(1, &tex->id);
return tex; return tex;
} }
@ -50,6 +48,8 @@ struct Texture *texture_loadfromfile(const char *path)
{ {
struct Texture *new = texture_pullfromfile(path); struct Texture *new = texture_pullfromfile(path);
glGenTextures(1, &new->id);
tex_gpu_load(new); tex_gpu_load(new);
return new; return new;
@ -89,83 +89,22 @@ void tex_free(struct Texture *tex)
void tex_gpu_load(struct Texture *tex) void tex_gpu_load(struct Texture *tex)
{ {
if (tex->anim.frames >= 0) {
glBindTexture(GL_TEXTURE_2D, tex->id); glBindTexture(GL_TEXTURE_2D, tex->id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->width, tex->height, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->width, tex->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex->data);
GL_RGBA, GL_UNSIGNED_BYTE, tex->data);
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
if (tex->opts.sprite) { if (tex->opts.sprite) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
} else { } else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
} }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
} else {
/*
glBindTexture(GL_TEXTURE_2D_ARRAY, tex->id);
glTexImage3D(GL_TEXTURE_2D_ARRAY,
0,
GL_RGBA,
tex->anim.dimensions[0],
tex->anim.dimensions[1],
tex->anim.frames, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
SDL_Surface *loadedSurface =
SDL_CreateRGBSurfaceFrom(tex->data, tex->width, tex->height,
32, (4 * tex->width),
0x000000ff, 0x0000ff00, 0x00ff0000,
0xff000000);
SDL_Surface *tempSurface;
tempSurface =
SDL_CreateRGBSurfaceWithFormat(0, tex->anim.dimensions[0],
tex->anim.dimensions[1], 32,
SDL_PIXELFORMAT_RGBA32);
SDL_Rect srcRect;
srcRect.x = 0;
srcRect.y = 0;
srcRect.w = tex->anim.dimensions[0];
srcRect.h = tex->anim.dimensions[1];
for (int i = 0; i < tex->anim.frames; i++) {
srcRect.x = i * srcRect.w;
SDL_FillRect(tempSurface, NULL, 0x000000);
TestSDLError(SDL_BlitSurface
(loadedSurface, &srcRect, tempSurface, NULL));
//SDL_UnlockSurface(tempSurface);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i,
tex->anim.dimensions[0],
tex->anim.dimensions[1], 1, GL_RGBA,
GL_UNSIGNED_BYTE, tempSurface->pixels);
}
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_EDGE);
SDL_FreeSurface(loadedSurface);
SDL_FreeSurface(tempSurface);
*/
}
} }
unsigned int tex_incr_anim(unsigned int interval, struct TexAnimation *tex_anim) unsigned int tex_incr_anim(unsigned int interval, struct TexAnimation *tex_anim)