From 03de23d42e418f5d7d86c1fbe8665aef1f0a36bd Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 4 Dec 2017 13:13:27 +0200 Subject: [PATCH] Add a get_default_sized_pixelformat function Floating point depth buffers are now preferred also on OpenGL ES when available. --- source/pixelformat.cpp | 14 ++++++++++++++ source/pixelformat.h | 1 + source/renderbuffer.cpp | 7 ++----- source/texture.cpp | 7 ++----- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/source/pixelformat.cpp b/source/pixelformat.cpp index 6655c6b2..0b13f3cc 100644 --- a/source/pixelformat.cpp +++ b/source/pixelformat.cpp @@ -173,6 +173,20 @@ PixelFormat get_sized_pixelformat(PixelFormat pf, unsigned size) } } +PixelFormat get_default_sized_pixelformat(PixelFormat pf) +{ + pf = get_unsized_pixelformat(pf); + unsigned size = 1; + if(pf==DEPTH_COMPONENT) + { + if(get_gl_api()==OPENGL_ES2 && !ARB_depth_buffer_float) + size = 2; + else + size = 4; + } + return get_sized_pixelformat(pf, size); +} + PixelFormat get_srgb_pixelformat(PixelFormat pf) { switch(pf) diff --git a/source/pixelformat.h b/source/pixelformat.h index 5d59c255..2db894a7 100644 --- a/source/pixelformat.h +++ b/source/pixelformat.h @@ -70,6 +70,7 @@ PixelFormat storage_pixelformat_from_graphics(Graphics::PixelFormat, bool = fals PixelFormat get_base_pixelformat(PixelFormat); PixelFormat get_unsized_pixelformat(PixelFormat); PixelFormat get_sized_pixelformat(PixelFormat, unsigned = 1); +PixelFormat get_default_sized_pixelformat(PixelFormat); PixelFormat get_srgb_pixelformat(PixelFormat); unsigned get_component_count(PixelFormat); unsigned get_component_size(PixelFormat); diff --git a/source/renderbuffer.cpp b/source/renderbuffer.cpp index 50983622..9d19e08b 100644 --- a/source/renderbuffer.cpp +++ b/source/renderbuffer.cpp @@ -23,11 +23,8 @@ Renderbuffer::~Renderbuffer() PixelFormat Renderbuffer::normalize_format(PixelFormat fmt) { - if(!get_component_size(fmt) && MSP_sized_internal_formats) - { - unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1); - return get_sized_pixelformat(fmt, size); - } + if(!get_component_size(fmt) && OES_required_internalformat) + return get_default_sized_pixelformat(fmt); return fmt; } diff --git a/source/texture.cpp b/source/texture.cpp index 185ed7fe..a8b2f6d0 100644 --- a/source/texture.cpp +++ b/source/texture.cpp @@ -95,11 +95,8 @@ DataType Texture::get_alloc_type(PixelFormat fmt) void Texture::set_internal_format(PixelFormat fmt) { - if(!get_component_size(fmt) && MSP_sized_internal_formats) - { - unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1); - fmt = get_sized_pixelformat(fmt, size); - } + if(!get_component_size(fmt) && OES_required_internalformat) + fmt = get_default_sized_pixelformat(fmt); FormatSwizzle swiz = NO_SWIZZLE; if(ARB_texture_rg && ARB_texture_swizzle) -- 2.43.0