mirror of https://github.com/bjornbytes/lovr.git
lovrTextureCreateFromHandle;
This commit is contained in:
parent
5b5e9fbc00
commit
75ca4b0cba
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue