TextureType;

This commit is contained in:
bjorn 2016-11-27 10:34:22 -08:00
parent 8a68027f0a
commit cf6c862aaa
5 changed files with 17 additions and 8 deletions

View File

@ -20,7 +20,7 @@ void lovrGraphicsInit() {
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetEmpty());
state.defaultTexture = lovrTextureCreateFromData(lovrTextureDataGetEmpty());
glGenBuffers(1, &state.shapeBuffer);
glGenBuffers(1, &state.shapeIndexBuffer);
glGenVertexArrays(1, &state.shapeArray);

View File

@ -3,12 +3,13 @@
#include "util.h"
#include <stdlib.h>
Texture* lovrTextureCreate(TextureData* textureData) {
Texture* lovrTextureCreateFromData(TextureData* textureData) {
Texture* texture = lovrAlloc(sizeof(Texture), lovrTextureDestroy);
if (!texture) return NULL;
texture->textureData = textureData;
texture->buffer = 0;
texture->type = TEXTURE_IMAGE;
texture->buffer = NULL;
glGenTextures(1, &texture->id);
if (textureData) {
@ -30,6 +31,8 @@ Texture* lovrTextureCreateFromBuffer(Buffer* buffer) {
if (!texture) return NULL;
glGenTextures(1, &texture->id);
texture->textureData = NULL;
texture->type = TEXTURE_BUFFER;
texture->buffer = buffer;
lovrTextureBind(texture);
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGB32F, buffer->vbo);
@ -54,7 +57,7 @@ void lovrTextureDataDestroy(TextureData* textureData) {
}
void lovrTextureBind(Texture* texture) {
glBindTexture(texture->buffer ? GL_TEXTURE_BUFFER : GL_TEXTURE_2D, texture->id);
glBindTexture(texture->type, texture->id);
}
void lovrTextureRefresh(Texture* texture) {

View File

@ -13,6 +13,11 @@ typedef struct {
int channels;
} TextureData;
typedef enum {
TEXTURE_IMAGE = GL_TEXTURE_2D,
TEXTURE_BUFFER = GL_TEXTURE_BUFFER
} TextureType;
typedef enum {
FILTER_NEAREST = GL_NEAREST,
FILTER_LINEAR = GL_LINEAR
@ -28,19 +33,20 @@ typedef enum {
typedef struct {
Ref ref;
TextureData* textureData;
TextureType type;
GLuint id;
struct Buffer* buffer;
int width;
int height;
FilterMode filterMin;
FilterMode filterMag;
WrapMode wrapHorizontal;
WrapMode wrapVertical;
struct Buffer* buffer;
} Texture;
#endif
Texture* lovrTextureCreate(TextureData* textureData);
Texture* lovrTextureCreateFromData(TextureData* textureData);
Texture* lovrTextureCreateFromBuffer(struct Buffer* buffer);
void lovrTextureDestroy(const Ref* ref);
void lovrTextureDataDestroy(TextureData* textureData);

View File

@ -640,7 +640,7 @@ int l_lovrGraphicsNewTexture(lua_State* L) {
return luaL_error(L, "Could not load texture file '%s'", path);
}
TextureData* textureData = lovrTextureDataFromFile(data, size);
texture = lovrTextureCreate(textureData);
texture = lovrTextureCreateFromData(textureData);
free(data);
} else {
Buffer* buffer = luax_checktype(L, 1, Buffer); // TODO don't error if it's not a buffer

View File

@ -79,7 +79,7 @@ int l_lovrControllerNewModel(lua_State* L) {
ModelData* modelData = lovrModelDataFromOpenVRModel(rawData);
TextureData* textureData = lovrTextureDataFromOpenVRModel(rawData);
Model* model = lovrModelCreate(modelData);
Texture* texture = lovrTextureCreate(textureData);
Texture* texture = lovrTextureCreateFromData(textureData);
lovrModelSetTexture(model, texture);
luax_pushtype(L, Model, model);
} else {