77#include < optional>
88#include < utility>
99
10+ #include " flutter/fml/logging.h"
1011#include " flutter/fml/mapping.h"
1112#include " flutter/fml/trace_event.h"
1213#include " impeller/base/allocation.h"
1718
1819namespace impeller {
1920
21+ static bool IsDepthStencilFormat (PixelFormat format) {
22+ switch (format) {
23+ case PixelFormat::kS8UInt :
24+ case PixelFormat::kD24UnormS8Uint :
25+ case PixelFormat::kD32FloatS8UInt :
26+ return true ;
27+ case PixelFormat::kUnknown :
28+ case PixelFormat::kA8UNormInt :
29+ case PixelFormat::kR8UNormInt :
30+ case PixelFormat::kR8G8UNormInt :
31+ case PixelFormat::kR8G8B8A8UNormInt :
32+ case PixelFormat::kR8G8B8A8UNormIntSRGB :
33+ case PixelFormat::kB8G8R8A8UNormInt :
34+ case PixelFormat::kB8G8R8A8UNormIntSRGB :
35+ case PixelFormat::kR32G32B32A32Float :
36+ case PixelFormat::kR16G16B16A16Float :
37+ case PixelFormat::kB10G10R10XR :
38+ case PixelFormat::kB10G10R10XRSRGB :
39+ case PixelFormat::kB10G10R10A10XR :
40+ return false ;
41+ }
42+ FML_UNREACHABLE ();
43+ }
44+
2045static TextureGLES::Type GetTextureTypeFromDescriptor (
2146 const TextureDescriptor& desc) {
2247 const auto usage = static_cast <TextureUsageMask>(desc.usage );
2348 const auto render_target =
2449 static_cast <TextureUsageMask>(TextureUsage::kRenderTarget );
2550 const auto is_msaa = desc.sample_count == SampleCount::kCount4 ;
26- if (usage == render_target && desc.format == PixelFormat:: kS8UInt ) {
51+ if (usage == render_target && IsDepthStencilFormat ( desc.format ) ) {
2752 return is_msaa ? TextureGLES::Type::kRenderBufferMultisampled
2853 : TextureGLES::Type::kRenderBuffer ;
2954 }
@@ -457,19 +482,20 @@ TextureGLES::Type TextureGLES::GetType() const {
457482 return type_;
458483}
459484
460- static GLenum ToAttachmentPoint (TextureGLES::AttachmentPoint point) {
485+ static GLenum ToAttachmentType (TextureGLES::AttachmentType point) {
461486 switch (point) {
462- case TextureGLES::AttachmentPoint ::kColor0 :
487+ case TextureGLES::AttachmentType ::kColor0 :
463488 return GL_COLOR_ATTACHMENT0;
464- case TextureGLES::AttachmentPoint ::kDepth :
489+ case TextureGLES::AttachmentType ::kDepth :
465490 return GL_DEPTH_ATTACHMENT;
466- case TextureGLES::AttachmentPoint ::kStencil :
491+ case TextureGLES::AttachmentType ::kStencil :
467492 return GL_STENCIL_ATTACHMENT;
468493 }
469494}
470495
471- bool TextureGLES::SetAsFramebufferAttachment (GLenum target,
472- AttachmentPoint point) const {
496+ bool TextureGLES::SetAsFramebufferAttachment (
497+ GLenum target,
498+ AttachmentType attachment_type) const {
473499 if (!IsValid ()) {
474500 return false ;
475501 }
@@ -482,29 +508,30 @@ bool TextureGLES::SetAsFramebufferAttachment(GLenum target,
482508
483509 switch (type_) {
484510 case Type::kTexture :
485- gl.FramebufferTexture2D (target, // target
486- ToAttachmentPoint (point ), // attachment
487- GL_TEXTURE_2D, // textarget
488- handle.value (), // texture
489- 0 // level
511+ gl.FramebufferTexture2D (target, // target
512+ ToAttachmentType (attachment_type ), // attachment
513+ GL_TEXTURE_2D, // textarget
514+ handle.value (), // texture
515+ 0 // level
490516 );
491517 break ;
492518 case Type::kTextureMultisampled :
493519 gl.FramebufferTexture2DMultisampleEXT (
494- target, // target
495- ToAttachmentPoint (point ), // attachment
496- GL_TEXTURE_2D, // textarget
497- handle.value (), // texture
498- 0 , // level
499- 4 // samples
520+ target, // target
521+ ToAttachmentType (attachment_type ), // attachment
522+ GL_TEXTURE_2D, // textarget
523+ handle.value (), // texture
524+ 0 , // level
525+ 4 // samples
500526 );
501527 break ;
502528 case Type::kRenderBuffer :
503529 case Type::kRenderBufferMultisampled :
504- gl.FramebufferRenderbuffer (target, // target
505- ToAttachmentPoint (point), // attachment
506- GL_RENDERBUFFER, // render-buffer target
507- handle.value () // render-buffer
530+ gl.FramebufferRenderbuffer (
531+ target, // target
532+ ToAttachmentType (attachment_type), // attachment
533+ GL_RENDERBUFFER, // render-buffer target
534+ handle.value () // render-buffer
508535 );
509536 break ;
510537 }
0 commit comments