lovrTextureCreateFromHandle;

This commit is contained in:
bjorn 2018-09-08 22:28:30 -07:00
parent 5b5e9fbc00
commit 75ca4b0cba
2 changed files with 24 additions and 7 deletions

View File

@ -201,6 +201,15 @@ static GLenum convertWrapMode(WrapMode mode) {
}
}
static GLenum convertTextureTarget(TextureType type) {
switch (type) {
case TEXTURE_2D: return GL_TEXTURE_2D; break;
case TEXTURE_ARRAY: return GL_TEXTURE_2D_ARRAY; break;
case TEXTURE_CUBE: return GL_TEXTURE_CUBE_MAP; break;
case TEXTURE_VOLUME: return GL_TEXTURE_3D; break;
}
}
static GLenum convertTextureFormat(TextureFormat format) {
switch (format) {
case FORMAT_RGB: return GL_RGB;
@ -915,13 +924,7 @@ Texture* lovrTextureCreate(TextureType type, TextureData** slices, int sliceCoun
texture->type = type;
texture->srgb = srgb;
texture->mipmaps = mipmaps;
switch (type) {
case TEXTURE_2D: texture->target = GL_TEXTURE_2D; break;
case TEXTURE_ARRAY: texture->target = GL_TEXTURE_2D_ARRAY; break;
case TEXTURE_CUBE: texture->target = GL_TEXTURE_CUBE_MAP; break;
case TEXTURE_VOLUME: texture->target = GL_TEXTURE_3D; break;
}
texture->target = convertTextureTarget(type);
WrapMode wrap = type == TEXTURE_CUBE ? WRAP_CLAMP : WRAP_REPEAT;
glGenTextures(1, &texture->id);
@ -944,6 +947,19 @@ Texture* lovrTextureCreate(TextureType type, TextureData** slices, int sliceCoun
return texture;
}
Texture* lovrTextureCreateFromHandle(uint32_t handle, TextureType type) {
lovrAssert(glIsTexture(handle), "Invalid texture handle");
Texture* texture = lovrAlloc(Texture, lovrTextureDestroy);
if (!texture) return NULL;
texture->type = type;
texture->id = handle;
texture->target = convertTextureTarget(type);
return texture;
}
void lovrTextureDestroy(void* ref) {
Texture* texture = ref;
glDeleteTextures(1, &texture->id);

View File

@ -37,6 +37,7 @@ typedef struct {
typedef struct Texture Texture;
Texture* lovrTextureCreate(TextureType type, TextureData** slices, int sliceCount, bool srgb, bool mipmaps, int msaa);
Texture* lovrTextureCreateFromHandle(uint32_t handle);
void lovrTextureDestroy(void* ref);
void lovrTextureAllocate(Texture* texture, int width, int height, int depth, TextureFormat format);
void lovrTextureReplacePixels(Texture* texture, TextureData* data, int x, int y, int slice, int mipmap);