mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-27 22:03:01 +00:00
gs-texture: Reduce context lock time and improve code
This commit is contained in:
parent
aa59806322
commit
624bdda6a3
1 changed files with 23 additions and 15 deletions
|
@ -35,6 +35,16 @@
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static uint32_t decode_flags(gs::texture::flags texture_flags)
|
||||||
|
{
|
||||||
|
uint32_t flags = 0;
|
||||||
|
if (exact(texture_flags, gs::texture::flags::Dynamic))
|
||||||
|
flags |= GS_DYNAMIC;
|
||||||
|
if (exact(texture_flags, gs::texture::flags::BuildMipMaps))
|
||||||
|
flags |= GS_BUILD_MIPMAPS;
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
gs::texture::texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels,
|
gs::texture::texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels,
|
||||||
const uint8_t** mip_data, gs::texture::flags texture_flags)
|
const uint8_t** mip_data, gs::texture::flags texture_flags)
|
||||||
{
|
{
|
||||||
|
@ -51,11 +61,10 @@ gs::texture::texture(uint32_t width, uint32_t height, gs_color_format format, ui
|
||||||
throw std::logic_error("mip mapping requires power of two dimensions");
|
throw std::logic_error("mip mapping requires power of two dimensions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
auto gctx = gs::context();
|
auto gctx = gs::context();
|
||||||
_texture = gs_texture_create(
|
_texture = gs_texture_create(width, height, format, mip_levels, mip_data, decode_flags(texture_flags));
|
||||||
width, height, format, mip_levels, mip_data,
|
}
|
||||||
(((texture_flags & flags::Dynamic) == flags::Dynamic) ? GS_DYNAMIC : 0)
|
|
||||||
| (((texture_flags & flags::BuildMipMaps) == flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0));
|
|
||||||
|
|
||||||
if (!_texture)
|
if (!_texture)
|
||||||
throw std::runtime_error("Failed to create texture.");
|
throw std::runtime_error("Failed to create texture.");
|
||||||
|
@ -83,11 +92,11 @@ gs::texture::texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_f
|
||||||
throw std::logic_error("mip mapping requires power of two dimensions");
|
throw std::logic_error("mip mapping requires power of two dimensions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
auto gctx = gs::context();
|
auto gctx = gs::context();
|
||||||
_texture = gs_voltexture_create(
|
_texture =
|
||||||
width, height, depth, format, mip_levels, mip_data,
|
gs_voltexture_create(width, height, depth, format, mip_levels, mip_data, decode_flags(texture_flags));
|
||||||
(((texture_flags & flags::Dynamic) == flags::Dynamic) ? GS_DYNAMIC : 0)
|
}
|
||||||
| (((texture_flags & flags::BuildMipMaps) == flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0));
|
|
||||||
|
|
||||||
if (!_texture)
|
if (!_texture)
|
||||||
throw std::runtime_error("Failed to create texture.");
|
throw std::runtime_error("Failed to create texture.");
|
||||||
|
@ -109,11 +118,10 @@ gs::texture::texture(uint32_t size, gs_color_format format, uint32_t mip_levels,
|
||||||
throw std::logic_error("mip mapping requires power of two dimensions");
|
throw std::logic_error("mip mapping requires power of two dimensions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
auto gctx = gs::context();
|
auto gctx = gs::context();
|
||||||
_texture = gs_cubetexture_create(
|
_texture = gs_cubetexture_create(size, format, mip_levels, mip_data, decode_flags(texture_flags));
|
||||||
size, format, mip_levels, mip_data,
|
}
|
||||||
(((texture_flags & flags::Dynamic) == flags::Dynamic) ? GS_DYNAMIC : 0)
|
|
||||||
| (((texture_flags & flags::BuildMipMaps) == flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0));
|
|
||||||
|
|
||||||
if (!_texture)
|
if (!_texture)
|
||||||
throw std::runtime_error("Failed to create texture.");
|
throw std::runtime_error("Failed to create texture.");
|
||||||
|
|
Loading…
Reference in a new issue