starting textures
Some checks failed
Build Dusk / run-tests (push) Failing after 16s
Build Dusk / build-linux (push) Failing after 17s
Build Dusk / build-psp (push) Failing after 18s
Build Dusk / build-gamecube (push) Failing after 17s
Build Dusk / build-wii (push) Failing after 17s
Some checks failed
Build Dusk / run-tests (push) Failing after 16s
Build Dusk / build-linux (push) Failing after 17s
Build Dusk / build-psp (push) Failing after 18s
Build Dusk / build-gamecube (push) Failing after 17s
Build Dusk / build-wii (push) Failing after 17s
This commit is contained in:
@@ -22,6 +22,8 @@
|
||||
|
||||
display_t DISPLAY = { 0 };
|
||||
|
||||
texture_t TEXTURE;
|
||||
|
||||
errorret_t displayInit(void) {
|
||||
memoryZero(&DISPLAY, sizeof(DISPLAY));
|
||||
|
||||
@@ -36,6 +38,19 @@ errorret_t displayInit(void) {
|
||||
errorChain(textInit());
|
||||
errorChain(screenInit());
|
||||
|
||||
color_t pixels[2 * 2] = {
|
||||
COLOR_RED, COLOR_GREEN,
|
||||
COLOR_BLUE, COLOR_WHITE
|
||||
};
|
||||
errorChain(textureInit(
|
||||
&TEXTURE,
|
||||
2, 2,
|
||||
TEXTURE_FORMAT_RGBA,
|
||||
(texturedata_t){
|
||||
.rgbaColors = pixels
|
||||
}
|
||||
));
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
@@ -76,10 +91,13 @@ errorret_t displayUpdate(void) {
|
||||
errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_PROJECTION, proj));
|
||||
errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_VIEW, view));
|
||||
errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_MODEL, model));
|
||||
|
||||
errorChain(shaderSetTexture(&SHADER_UNLIT, SHADER_UNLIT_TEXTURE, &TEXTURE));
|
||||
errorChain(spriteBatchPush(
|
||||
NULL,
|
||||
0.0f, 0.0f, 100, 100, COLOR_WHITE, 0, 0, 1, 1
|
||||
0.0f, 0.0f,
|
||||
1.0f, 1.0f,
|
||||
COLOR_WHITE,
|
||||
0.0f, 0.0f,
|
||||
1.0f, 1.0f
|
||||
));
|
||||
errorChain(spriteBatchFlush());
|
||||
|
||||
|
||||
@@ -32,6 +32,18 @@ errorret_t shaderSetMatrix(
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t shaderSetTexture(
|
||||
shader_t *shader,
|
||||
const char_t *name,
|
||||
texture_t *texture
|
||||
) {
|
||||
assertNotNull(shader, "Shader cannot be null");
|
||||
assertStrLenMin(name, 1, "Uniform name cannot be empty");
|
||||
assertNotNull(texture, "Texture cannot be null");
|
||||
errorChain(shaderSetTexturePlatform(shader, name, texture));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// errorret_t shaderSetColor(
|
||||
// shader_t *shader,
|
||||
// const char_t *name,
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define SHADER_UNLIT_PROJECTION "u_Proj"
|
||||
#define SHADER_UNLIT_VIEW "u_View"
|
||||
#define SHADER_UNLIT_MODEL "u_Model"
|
||||
#define SHADER_UNLIT_TEXTURE "u_Texture"
|
||||
// #define SHADER_UNLIT_COLOR "u_Color"
|
||||
|
||||
extern shaderdefinition_t SHADER_UNLIT_DEFINITION;
|
||||
|
||||
@@ -25,7 +25,6 @@ errorret_t spriteBatchInit() {
|
||||
}
|
||||
|
||||
errorret_t spriteBatchPush(
|
||||
texture_t *texture,
|
||||
const float_t minX,
|
||||
const float_t minY,
|
||||
const float_t maxX,
|
||||
@@ -37,7 +36,6 @@ errorret_t spriteBatchPush(
|
||||
const float_t v1
|
||||
) {
|
||||
errorChain(spriteBatchPush3D(
|
||||
texture,
|
||||
(vec3){ minX, minY, 0 },
|
||||
(vec3){ maxX, maxY, 0 },
|
||||
color,
|
||||
@@ -48,7 +46,6 @@ errorret_t spriteBatchPush(
|
||||
}
|
||||
|
||||
errorret_t spriteBatchPush3D(
|
||||
texture_t *texture,
|
||||
const vec3 min,
|
||||
const vec3 max,
|
||||
const color_t color,
|
||||
@@ -56,12 +53,8 @@ errorret_t spriteBatchPush3D(
|
||||
const vec2 uv1
|
||||
) {
|
||||
// Need to flush?
|
||||
if(
|
||||
SPRITEBATCH.currentTexture != texture ||
|
||||
SPRITEBATCH.spriteCount >= SPRITEBATCH_SPRITES_MAX
|
||||
) {
|
||||
if(SPRITEBATCH.spriteCount >= SPRITEBATCH_SPRITES_MAX) {
|
||||
errorChain(spriteBatchFlush());
|
||||
SPRITEBATCH.currentTexture = texture;
|
||||
}
|
||||
|
||||
size_t vertexOffset = SPRITEBATCH.spriteCount * QUAD_VERTEX_COUNT;
|
||||
@@ -75,7 +68,6 @@ errorret_t spriteBatchPush3D(
|
||||
|
||||
void spriteBatchClear() {
|
||||
SPRITEBATCH.spriteCount = 0;
|
||||
SPRITEBATCH.currentTexture = NULL;
|
||||
}
|
||||
|
||||
errorret_t spriteBatchFlush() {
|
||||
@@ -85,7 +77,6 @@ errorret_t spriteBatchFlush() {
|
||||
|
||||
size_t vertexCount = QUAD_VERTEX_COUNT * SPRITEBATCH.spriteCount;
|
||||
errorChain(meshFlush(&SPRITEBATCH.mesh, 0, vertexCount));
|
||||
errorChain(textureBind(SPRITEBATCH.currentTexture));
|
||||
errorChain(meshDraw(&SPRITEBATCH.mesh, 0, vertexCount));
|
||||
spriteBatchClear();
|
||||
errorOk();
|
||||
|
||||
@@ -7,16 +7,13 @@
|
||||
|
||||
#pragma once
|
||||
#include "display/mesh/quad.h"
|
||||
#include "display/texture/texture.h"
|
||||
|
||||
#define SPRITEBATCH_SPRITES_MAX 1
|
||||
#define SPRITEBATCH_SPRITES_MAX 16
|
||||
#define SPRITEBATCH_VERTEX_COUNT (SPRITEBATCH_SPRITES_MAX * QUAD_VERTEX_COUNT)
|
||||
|
||||
|
||||
typedef struct {
|
||||
mesh_t mesh;
|
||||
int32_t spriteCount;
|
||||
texture_t *currentTexture;
|
||||
} spritebatch_t;
|
||||
|
||||
// Have to define these seperately because of alignment in certain platforms.
|
||||
@@ -39,7 +36,6 @@ errorret_t spriteBatchInit();
|
||||
* Currently changing texture pointer will cause the buffer to flush but this is
|
||||
* also likely to change in the future.
|
||||
*
|
||||
* @param texture The texture to use for the sprite.
|
||||
* @param minX The minimum x coordinate of the sprite.
|
||||
* @param minY The minimum y coordinate of the sprite.
|
||||
* @param maxX The maximum x coordinate of the sprite.
|
||||
@@ -52,7 +48,6 @@ errorret_t spriteBatchInit();
|
||||
* @return An error code indicating success or failure.
|
||||
*/
|
||||
errorret_t spriteBatchPush(
|
||||
texture_t *texture,
|
||||
const float_t minX,
|
||||
const float_t minY,
|
||||
const float_t maxX,
|
||||
@@ -68,7 +63,6 @@ errorret_t spriteBatchPush(
|
||||
* Pushes a 3D sprite to the batch. This is like spriteBatchPush but takes
|
||||
* 3D coordinates instead of 2D.
|
||||
*
|
||||
* @param texture The texture to use for the sprite.
|
||||
* @param min The minimum (x,y,z) coordinate of the sprite.
|
||||
* @param max The maximum (x,y,z) coordinate of the sprite.
|
||||
* @param color The color to tint the sprite with.
|
||||
@@ -77,7 +71,6 @@ errorret_t spriteBatchPush(
|
||||
* @return An error code indicating success or failure.
|
||||
*/
|
||||
errorret_t spriteBatchPush3D(
|
||||
texture_t *texture,
|
||||
const vec3 min,
|
||||
const vec3 max,
|
||||
const color_t color,
|
||||
|
||||
@@ -46,7 +46,7 @@ errorret_t textDrawChar(
|
||||
tilesetTileGetUV(tileset, tileIndex, uv);
|
||||
|
||||
errorChain(spriteBatchPush(
|
||||
texture,
|
||||
// texture,
|
||||
x, y,
|
||||
x + tileset->tileWidth,
|
||||
y + tileset->tileHeight,
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include "util/math.h"
|
||||
#include "display/display.h"
|
||||
|
||||
texture_t *TEXTURE_BOUND = NULL;
|
||||
|
||||
errorret_t textureInit(
|
||||
texture_t *texture,
|
||||
const int32_t width,
|
||||
@@ -34,18 +32,9 @@ errorret_t textureInit(
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t textureBind(texture_t *texture) {
|
||||
errorChain(textureBindPlatform(texture));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t textureDispose(texture_t *texture) {
|
||||
assertNotNull(texture, "Texture cannot be NULL");
|
||||
|
||||
if(TEXTURE_BOUND == texture) {
|
||||
textureBind(NULL);
|
||||
}
|
||||
|
||||
errorChain(textureDisposePlatform(texture));
|
||||
errorOk();
|
||||
}
|
||||
@@ -13,9 +13,6 @@
|
||||
#ifndef textureInitPlatform
|
||||
#error "textureInitPlatform should not be defined."
|
||||
#endif
|
||||
#ifndef textureBindPlatform
|
||||
#error "textureBindPlatform should not be defined."
|
||||
#endif
|
||||
#ifndef textureDisposePlatform
|
||||
#error "textureDisposePlatform should not be defined."
|
||||
#endif
|
||||
@@ -28,8 +25,6 @@ typedef union texturedata_u {
|
||||
color_t *rgbaColors;
|
||||
} texturedata_t;
|
||||
|
||||
extern texture_t *TEXTURE_BOUND;
|
||||
|
||||
/**
|
||||
* Initializes a texture.
|
||||
*
|
||||
@@ -47,13 +42,6 @@ errorret_t textureInit(
|
||||
const texturedata_t data
|
||||
);
|
||||
|
||||
/**
|
||||
* Binds a texture for rendering. Providing NULL will unbind any texture.
|
||||
*
|
||||
* @param texture The texture to bind.
|
||||
*/
|
||||
errorret_t textureBind(texture_t *texture);
|
||||
|
||||
/**
|
||||
* Disposes a texture.
|
||||
*
|
||||
|
||||
@@ -176,7 +176,7 @@ void mapUpdate() {
|
||||
void mapRender() {
|
||||
if(!mapIsLoaded()) return;
|
||||
|
||||
textureBind(NULL);
|
||||
// textureBind(NULL);
|
||||
for(chunkindex_t i = 0; i < MAP_CHUNK_COUNT; i++) {
|
||||
mapChunkRender(&MAP.chunks[i]);
|
||||
}
|
||||
|
||||
@@ -32,32 +32,20 @@ int moduleSpriteBatchClear(lua_State *L) {
|
||||
int moduleSpriteBatchPush(lua_State *L) {
|
||||
assertNotNull(L, "Lua state is null");
|
||||
|
||||
// Texture pointer or Nil for no texture
|
||||
if(!lua_isuserdata(L, 1) && !lua_isnil(L, 1)) {
|
||||
return luaL_error(L, "First argument must be a texture or nil");
|
||||
}
|
||||
|
||||
// If texture is not nil, check it's a texture userdata
|
||||
texture_t *tex = NULL;
|
||||
if(lua_isuserdata(L, 1)) {
|
||||
tex = (texture_t *)luaL_checkudata(L, 1, "texture_mt");
|
||||
assertNotNull(tex, "Texture pointer cannot be NULL");
|
||||
}
|
||||
|
||||
// MinX, MinY, MaxX, MaxY
|
||||
if(
|
||||
!lua_isnumber(L, 2) || !lua_isnumber(L, 3) || !lua_isnumber(L, 4) ||
|
||||
!lua_isnumber(L, 5)
|
||||
!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3) ||
|
||||
!lua_isnumber(L, 4)
|
||||
) {
|
||||
return luaL_error(L, "Sprite coordinates must be numbers");
|
||||
}
|
||||
|
||||
// Color (struct) or nil for white
|
||||
color_t *color = NULL;
|
||||
if(lua_gettop(L) < 6 || lua_isnil(L, 6)) {
|
||||
if(lua_gettop(L) < 5 || lua_isnil(L, 5)) {
|
||||
// Allow NULL
|
||||
} else if(lua_isuserdata(L, 6)) {
|
||||
color = (color_t*)luaL_checkudata(L, 6, "color_mt");
|
||||
} else if(lua_isuserdata(L, 5)) {
|
||||
color = (color_t*)luaL_checkudata(L, 5, "color_mt");
|
||||
} else {
|
||||
return luaL_error(L, "Sprite color must be a color struct or nil");
|
||||
}
|
||||
@@ -68,31 +56,30 @@ int moduleSpriteBatchPush(lua_State *L) {
|
||||
float_t u1 = 1.0f;
|
||||
float_t v1 = 1.0f;
|
||||
|
||||
if(lua_gettop(L) >= 8) {
|
||||
if(!lua_isnumber(L, 7) || !lua_isnumber(L, 8)) {
|
||||
if(lua_gettop(L) >= 7) {
|
||||
if(!lua_isnumber(L, 6) || !lua_isnumber(L, 7)) {
|
||||
return luaL_error(L, "Sprite UV min coordinates must be numbers");
|
||||
}
|
||||
|
||||
u0 = (float_t)lua_tonumber(L, 7);
|
||||
v0 = (float_t)lua_tonumber(L, 8);
|
||||
u0 = (float_t)lua_tonumber(L, 6);
|
||||
v0 = (float_t)lua_tonumber(L, 7);
|
||||
}
|
||||
|
||||
if(lua_gettop(L) >= 10) {
|
||||
if(!lua_isnumber(L, 9) || !lua_isnumber(L, 10)) {
|
||||
if(lua_gettop(L) >= 9) {
|
||||
if(!lua_isnumber(L, 8) || !lua_isnumber(L, 9)) {
|
||||
return luaL_error(L, "Sprite UV max coordinates must be numbers");
|
||||
}
|
||||
|
||||
u1 = (float_t)lua_tonumber(L, 9);
|
||||
v1 = (float_t)lua_tonumber(L, 10);
|
||||
u1 = (float_t)lua_tonumber(L, 8);
|
||||
v1 = (float_t)lua_tonumber(L, 9);
|
||||
}
|
||||
|
||||
float_t minX = (float_t)lua_tonumber(L, 2);
|
||||
float_t minY = (float_t)lua_tonumber(L, 3);
|
||||
float_t maxX = (float_t)lua_tonumber(L, 4);
|
||||
float_t maxY = (float_t)lua_tonumber(L, 5);
|
||||
float_t minX = (float_t)lua_tonumber(L, 1);
|
||||
float_t minY = (float_t)lua_tonumber(L, 2);
|
||||
float_t maxX = (float_t)lua_tonumber(L, 3);
|
||||
float_t maxY = (float_t)lua_tonumber(L, 4);
|
||||
|
||||
errorret_t ret = spriteBatchPush(
|
||||
tex,
|
||||
minX,
|
||||
minY,
|
||||
maxX,
|
||||
|
||||
@@ -203,6 +203,32 @@ errorret_t shaderSetMatrixGL(
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t shaderSetTextureGL(
|
||||
shadergl_t *shader,
|
||||
const char_t *name,
|
||||
texture_t *texture
|
||||
) {
|
||||
assertNotNull(shader, "Shader cannot be null");
|
||||
assertNotNull(texture, "Texture cannot be null");
|
||||
assertStrLenMin(name, 1, "Uniform name cannot be empty");
|
||||
|
||||
#ifdef DUSK_OPENGL_LEGACY
|
||||
assertUnreachable("Cannot set textures on legacy opengl.");
|
||||
#else
|
||||
GLint location;
|
||||
errorChain(shaderParamGetLocationGL(shader, name, &location));
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
errorChain(errorGLCheck());
|
||||
glBindTexture(GL_TEXTURE_2D, texture->id);
|
||||
errorChain(errorGLCheck());
|
||||
glUniform1i(location, 0);
|
||||
errorChain(errorGLCheck());
|
||||
#endif
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// errorret_t shaderSetColorGL(
|
||||
// shadergl_t *shader,
|
||||
// const char_t *name,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
#pragma once
|
||||
#include "error/errorgl.h"
|
||||
#include "display/color.h"
|
||||
#include "display/texture/texture.h"
|
||||
|
||||
typedef struct {
|
||||
#ifdef DUSK_OPENGL_LEGACY
|
||||
@@ -100,11 +100,11 @@ errorret_t shaderSetMatrixGL(
|
||||
* @param color The color data to set.
|
||||
* @return An errorret_t indicating success or failure.
|
||||
*/
|
||||
// errorret_t shaderSetTextureGL(
|
||||
// shadergl_t *shader,
|
||||
// const char_t *name,
|
||||
// texture_t *texture
|
||||
// );
|
||||
errorret_t shaderSetTextureGL(
|
||||
shadergl_t *shader,
|
||||
const char_t *name,
|
||||
texture_t *texture
|
||||
);
|
||||
|
||||
/**
|
||||
* Sets a color uniform parameter in the shader.
|
||||
|
||||
@@ -14,6 +14,6 @@ typedef shaderdefinitiongl_t shaderdefinitionplatform_t;
|
||||
#define shaderInitPlatform shaderInitGL
|
||||
#define shaderBindPlatform shaderBindGL
|
||||
#define shaderSetMatrixPlatform shaderSetMatrixGL
|
||||
// #define shaderSetTexturePlatform shaderSetTextureGL
|
||||
#define shaderSetTexturePlatform shaderSetTextureGL
|
||||
// #define shaderSetColorPlatform shaderSetColorGL
|
||||
#define shaderDisposePlatform shaderDisposeGL
|
||||
@@ -20,17 +20,21 @@
|
||||
"uniform mat4 u_View;\n"
|
||||
"uniform mat4 u_Model;\n"
|
||||
"out vec4 v_Color;\n"
|
||||
"out vec2 v_TexCoord;\n"
|
||||
"void main() {\n"
|
||||
" gl_Position = u_Proj * u_View * u_Model * vec4(aPos, 1.0);\n"
|
||||
" v_Color = aColor;\n"
|
||||
" v_TexCoord = aTexCoord;\n"
|
||||
"}\n",
|
||||
|
||||
.frag =
|
||||
"#version 330 core\n"
|
||||
"uniform sampler2D u_Texture;\n"
|
||||
"in vec4 v_Color;\n"
|
||||
"in vec2 v_TexCoord;\n"
|
||||
"out vec4 FragColor;\n"
|
||||
"void main() {\n"
|
||||
" FragColor = v_Color;\n"
|
||||
" FragColor = texture(u_Texture, v_TexCoord) * v_Color;\n"
|
||||
"}\n"
|
||||
};
|
||||
#endif
|
||||
@@ -63,19 +63,6 @@ errorret_t textureInitGL(
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t textureBindGL(texturegl_t *texture) {
|
||||
if(texture == NULL) {
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
errorChain(errorGLCheck());
|
||||
errorOk();
|
||||
}
|
||||
|
||||
assertTrue(texture->id != 0, "Texture ID must be valid");
|
||||
glBindTexture(GL_TEXTURE_2D, texture->id);
|
||||
errorChain(errorGLCheck());
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t textureDisposeGL(texturegl_t *texture) {
|
||||
assertNotNull(texture, "Texture cannot be NULL");
|
||||
assertTrue(texture->id != 0, "Texture ID must be valid");
|
||||
|
||||
@@ -40,14 +40,6 @@ errorret_t textureInitGL(
|
||||
const texturedata_t data
|
||||
);
|
||||
|
||||
/**
|
||||
* Binds a texture for rendering. Providing NULL will unbind any texture.
|
||||
*
|
||||
* @param texture The texture to bind.
|
||||
* @return An error if the texture failed to bind, otherwise success.
|
||||
*/
|
||||
errorret_t textureBindGL(texturegl_t *texture);
|
||||
|
||||
/**
|
||||
* Disposes a texture.
|
||||
*
|
||||
|
||||
@@ -12,5 +12,4 @@ typedef textureformatgl_t textureformatplatform_t;
|
||||
typedef texturegl_t textureplatform_t;
|
||||
|
||||
#define textureInitPlatform textureInitGL
|
||||
#define textureBindPlatform textureBindGL
|
||||
#define textureDisposePlatform textureDisposeGL
|
||||
Reference in New Issue
Block a user