|
|
@ -176,6 +176,19 @@ GLint GetSwizzleSource(SwizzleSource source) { |
|
|
return GL_NONE; |
|
|
return GL_NONE; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GLenum GetComponent(PixelFormat format, bool is_first) { |
|
|
|
|
|
switch (format) { |
|
|
|
|
|
case PixelFormat::Z24S8: |
|
|
|
|
|
case PixelFormat::Z32FS8: |
|
|
|
|
|
return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; |
|
|
|
|
|
case PixelFormat::S8Z24: |
|
|
|
|
|
return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; |
|
|
|
|
|
default: |
|
|
|
|
|
UNREACHABLE(); |
|
|
|
|
|
return GL_DEPTH_COMPONENT; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { |
|
|
void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { |
|
|
if (params.IsBuffer()) { |
|
|
if (params.IsBuffer()) { |
|
|
return; |
|
|
return; |
|
|
@ -416,11 +429,21 @@ void CachedSurfaceView::ApplySwizzle(SwizzleSource x_source, SwizzleSource y_sou |
|
|
if (new_swizzle == swizzle) |
|
|
if (new_swizzle == swizzle) |
|
|
return; |
|
|
return; |
|
|
swizzle = new_swizzle; |
|
|
swizzle = new_swizzle; |
|
|
const std::array<GLint, 4> gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), |
|
|
|
|
|
GetSwizzleSource(z_source), |
|
|
|
|
|
GetSwizzleSource(w_source)}; |
|
|
|
|
|
|
|
|
const std::array gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), |
|
|
|
|
|
GetSwizzleSource(z_source), GetSwizzleSource(w_source)}; |
|
|
const GLuint handle = GetTexture(); |
|
|
const GLuint handle = GetTexture(); |
|
|
glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); |
|
|
|
|
|
|
|
|
const PixelFormat format = surface.GetSurfaceParams().pixel_format; |
|
|
|
|
|
switch (format) { |
|
|
|
|
|
case PixelFormat::Z24S8: |
|
|
|
|
|
case PixelFormat::Z32FS8: |
|
|
|
|
|
case PixelFormat::S8Z24: |
|
|
|
|
|
glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, |
|
|
|
|
|
GetComponent(format, x_source == SwizzleSource::R)); |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
OGLTextureView CachedSurfaceView::CreateTextureView() const { |
|
|
OGLTextureView CachedSurfaceView::CreateTextureView() const { |
|
|
|