642 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			642 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __RENDER_RENDERDEVICE_H__
							 | 
						||
| 
								 | 
							
								#define __RENDER_RENDERDEVICE_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Ptr.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/BaseComponent.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Delegate.h>
							 | 
						||
| 
								 | 
							
								#include <NsRender/RenderDeviceApi.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RenderTarget;
							 | 
						||
| 
								 | 
							
								class Texture;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture formats enumeration
							 | 
						||
| 
								 | 
							
								struct TextureFormat
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // A four-component format that supports 8 bits per channel including alpha
							 | 
						||
| 
								 | 
							
								        RGBA8,
							 | 
						||
| 
								 | 
							
								        // A four-component format that supports 8 bits for each color channel and 8 bits unused
							 | 
						||
| 
								 | 
							
								        RGBX8,
							 | 
						||
| 
								 | 
							
								        // A single-component format that supports 8 bits for the red channel
							 | 
						||
| 
								 | 
							
								        R8,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Render device capabilities
							 | 
						||
| 
								 | 
							
								struct DeviceCaps
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // Offset in pixel units from top-left corner to center of pixel
							 | 
						||
| 
								 | 
							
								    float centerPixelOffset = 0.0f;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // When this flag is enabled the device works in 'Linear' mode. All internal textures and
							 | 
						||
| 
								 | 
							
								    // offscreens are created in 'sRGB' format. In this mode, the device also expects colors
							 | 
						||
| 
								 | 
							
								    // (like the ones in the vertex buffer) in 'sRGB' format. It also indicates that the device
							 | 
						||
| 
								 | 
							
								    // writes to the render target in linear space
							 | 
						||
| 
								 | 
							
								    bool linearRendering = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // This flag is enabled to indicate that the device supports LCD subpixel rendering. Extra
							 | 
						||
| 
								 | 
							
								    // shaders and dual source blending are needed for this feature
							 | 
						||
| 
								 | 
							
								    bool subpixelRendering = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Indicates whether the device clip space depth values range from 0 to 1
							 | 
						||
| 
								 | 
							
								    bool depthRangeZeroToOne = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Whether the device clip space Y values are inverted (increase from top (-1) to bottom (1))
							 | 
						||
| 
								 | 
							
								    bool clipSpaceYInverted = false;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_CLANG_WARNING_DISABLE("-Wshadow")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Shader effects
							 | 
						||
| 
								 | 
							
								struct Shader
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // This is the high-level shader description that gets sent in each draw call.
							 | 
						||
| 
								 | 
							
								    // Implementations must map this to corresponding low-level shaders and layouts
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Shader for debug modes
							 | 
						||
| 
								 | 
							
								        RGBA,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Stencil-only rendering for masks
							 | 
						||
| 
								 | 
							
								        Mask,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shader used for clearing render target
							 | 
						||
| 
								 | 
							
								        Clear,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shaders for rendering geometry paths without PPAA
							 | 
						||
| 
								 | 
							
								        Path_Solid,
							 | 
						||
| 
								 | 
							
								        Path_Linear,
							 | 
						||
| 
								 | 
							
								        Path_Radial,
							 | 
						||
| 
								 | 
							
								        Path_Pattern,
							 | 
						||
| 
								 | 
							
								        Path_Pattern_Clamp,
							 | 
						||
| 
								 | 
							
								        Path_Pattern_Repeat,
							 | 
						||
| 
								 | 
							
								        Path_Pattern_MirrorU,
							 | 
						||
| 
								 | 
							
								        Path_Pattern_MirrorV,
							 | 
						||
| 
								 | 
							
								        Path_Pattern_Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shaders for rendering geometry paths with PPAA
							 | 
						||
| 
								 | 
							
								        Path_AA_Solid,
							 | 
						||
| 
								 | 
							
								        Path_AA_Linear,
							 | 
						||
| 
								 | 
							
								        Path_AA_Radial,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern_Clamp,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern_Repeat,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern_MirrorU,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern_MirrorV,
							 | 
						||
| 
								 | 
							
								        Path_AA_Pattern_Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shaders for rendering distance fields
							 | 
						||
| 
								 | 
							
								        SDF_Solid,
							 | 
						||
| 
								 | 
							
								        SDF_Linear,
							 | 
						||
| 
								 | 
							
								        SDF_Radial,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern_Clamp,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern_Repeat,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern_MirrorU,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern_MirrorV,
							 | 
						||
| 
								 | 
							
								        SDF_Pattern_Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shaders for rendering distance fields with subpixel rendering.
							 | 
						||
| 
								 | 
							
								        // These shaders are only used when the device reports support for
							 | 
						||
| 
								 | 
							
								        // subpixel rendering in DeviceCaps. Otherwise SDF_* shaders are used
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Solid,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Linear,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Radial,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern_Clamp,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern_Repeat,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern_MirrorU,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern_MirrorV,
							 | 
						||
| 
								 | 
							
								        SDF_LCD_Pattern_Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Shaders for offscreen rendering
							 | 
						||
| 
								 | 
							
								        Opacity_Solid,
							 | 
						||
| 
								 | 
							
								        Opacity_Linear,
							 | 
						||
| 
								 | 
							
								        Opacity_Radial,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern_Clamp,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern_Repeat,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern_MirrorU,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern_MirrorV,
							 | 
						||
| 
								 | 
							
								        Opacity_Pattern_Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Upsample,
							 | 
						||
| 
								 | 
							
								        Downsample,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Shadow,
							 | 
						||
| 
								 | 
							
								        Blur,
							 | 
						||
| 
								 | 
							
								        Custom_Effect,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint8_t v;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Vertex shaders for each Noesis::Shader (see table VertexForShader[])
							 | 
						||
| 
								 | 
							
								    struct Vertex
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        enum Enum
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            Pos,
							 | 
						||
| 
								 | 
							
								            PosColor,
							 | 
						||
| 
								 | 
							
								            PosTex0,
							 | 
						||
| 
								 | 
							
								            PosTex0Rect,
							 | 
						||
| 
								 | 
							
								            PosTex0RectTile,
							 | 
						||
| 
								 | 
							
								            PosColorCoverage,
							 | 
						||
| 
								 | 
							
								            PosTex0Coverage,
							 | 
						||
| 
								 | 
							
								            PosTex0CoverageRect,
							 | 
						||
| 
								 | 
							
								            PosTex0CoverageRectTile,
							 | 
						||
| 
								 | 
							
								            PosColorTex1_SDF,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1_SDF,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1Rect_SDF,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1RectTile_SDF,
							 | 
						||
| 
								 | 
							
								            PosColorTex1,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1Rect,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1RectTile,
							 | 
						||
| 
								 | 
							
								            PosColorTex0Tex1,
							 | 
						||
| 
								 | 
							
								            PosTex0Tex1_Downsample,
							 | 
						||
| 
								 | 
							
								            PosColorTex1Rect,
							 | 
						||
| 
								 | 
							
								            PosColorTex0RectImagePos,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Count
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Vertex Formats for each vertex shader (see table FormatForVertex[])
							 | 
						||
| 
								 | 
							
								        struct Format
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            enum Enum
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                Pos,
							 | 
						||
| 
								 | 
							
								                PosColor,
							 | 
						||
| 
								 | 
							
								                PosTex0,
							 | 
						||
| 
								 | 
							
								                PosTex0Rect,
							 | 
						||
| 
								 | 
							
								                PosTex0RectTile,
							 | 
						||
| 
								 | 
							
								                PosColorCoverage,
							 | 
						||
| 
								 | 
							
								                PosTex0Coverage,
							 | 
						||
| 
								 | 
							
								                PosTex0CoverageRect,
							 | 
						||
| 
								 | 
							
								                PosTex0CoverageRectTile,
							 | 
						||
| 
								 | 
							
								                PosColorTex1,
							 | 
						||
| 
								 | 
							
								                PosTex0Tex1,
							 | 
						||
| 
								 | 
							
								                PosTex0Tex1Rect,
							 | 
						||
| 
								 | 
							
								                PosTex0Tex1RectTile,
							 | 
						||
| 
								 | 
							
								                PosColorTex0Tex1,
							 | 
						||
| 
								 | 
							
								                PosColorTex1Rect,
							 | 
						||
| 
								 | 
							
								                PosColorTex0RectImagePos,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                Count
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // Attributes for each vertex format (see tables AttributesForFormat[] and SizeForFormat[])
							 | 
						||
| 
								 | 
							
								            struct Attr
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                enum Enum
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                //  --------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								                //  Attr                  Interpolation      Semantic
							 | 
						||
| 
								 | 
							
								                //  --------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								                    Pos,             //   linear             Position (xy)
							 | 
						||
| 
								 | 
							
								                    Color,           //   nointerpolation    sRGB Color (rgba)
							 | 
						||
| 
								 | 
							
								                    Tex0,            //   linear             TexCoord0 (uv)
							 | 
						||
| 
								 | 
							
								                    Tex1,            //   linear             TexCoord1 (uv)
							 | 
						||
| 
								 | 
							
								                    Coverage,        //   linear             Coverage (alpha)
							 | 
						||
| 
								 | 
							
								                    Rect,            //   nointerpolation    Rect (x0, y0, x1, y1)
							 | 
						||
| 
								 | 
							
								                    Tile,            //   nointerpolation    Rect (x, y, width, height)
							 | 
						||
| 
								 | 
							
								                    ImagePos,        //   linear             Position (xy) - Scale(zw)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    Count
							 | 
						||
| 
								 | 
							
								                };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                // Types for each vertex format attribute (see tables TypeForAttr[] and SizeForType[])
							 | 
						||
| 
								 | 
							
								                struct Type
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    enum Enum
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        // One 32-bit floating-point component
							 | 
						||
| 
								 | 
							
								                        Float,
							 | 
						||
| 
								 | 
							
								                        // Two 32-bit floating-point components
							 | 
						||
| 
								 | 
							
								                        Float2,
							 | 
						||
| 
								 | 
							
								                        // Four 32-bit floating-point components
							 | 
						||
| 
								 | 
							
								                        Float4,
							 | 
						||
| 
								 | 
							
								                        // Four 8-bit normalized unsigned integer components
							 | 
						||
| 
								 | 
							
								                        UByte4Norm,
							 | 
						||
| 
								 | 
							
								                        // Four 16-bit normalized unsigned integer components
							 | 
						||
| 
								 | 
							
								                        UShort4Norm,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        Count
							 | 
						||
| 
								 | 
							
								                    };
							 | 
						||
| 
								 | 
							
								                };
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Table for getting the vertex shader corresponding to each Noesis::Shader
							 | 
						||
| 
								 | 
							
								// Noesis::Shader => Noesis::Shader::Vertex
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t VertexForShader[Noesis::Shader::Count] =
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    0, 0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 8, 9, 10, 10, 10, 11, 12, 12, 12,
							 | 
						||
| 
								 | 
							
								    12, 9, 10, 10, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 15, 16, 16, 16, 16, 17, 18, 19, 13, 20
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Table for getting the vertex format corresponding to each vertex shader
							 | 
						||
| 
								 | 
							
								// Noesis::Shader::Vertex => Noesis::Shader::Vertex::Format
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t FormatForVertex[Noesis::Shader::Vertex::Count] = 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 9, 10, 11, 12, 13, 10, 14, 15
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Size in bytes for each vertex format
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t SizeForFormat[Noesis::Shader::Vertex::Format::Count] = 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    8, 12, 16, 24, 40, 16, 20, 28, 44, 20, 24, 32, 48, 28, 28, 44
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Table for getting the attribute bitmask corresponding to each vertex format
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t AttributesForFormat[Noesis::Shader::Vertex::Format::Count] =
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    1, 3, 5, 37, 101, 19, 21, 53, 117, 11, 13, 45, 109, 15, 43, 167
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Table for getting the type corresponding to each vertex format attribute
							 | 
						||
| 
								 | 
							
								// Noesis::Shader::Vertex::Format::Attr => Noesis::Shader::Vertex::Format::Attr::Type
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t TypeForAttr[Noesis::Shader::Vertex::Format::Attr::Count] =
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    1, 3, 1, 1, 0, 4, 2, 2
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Table for getting the size in bytes corresponding to each vertex format attribute type
							 | 
						||
| 
								 | 
							
								static constexpr const uint8_t SizeForType[Noesis::Shader::Vertex::Format::Attr::Type::Count]
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    4, 8, 16, 4, 8
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Alpha blending mode
							 | 
						||
| 
								 | 
							
								struct BlendMode
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								                                 //  ----------------------------------------------------
							 | 
						||
| 
								 | 
							
								                                 //  COLOR                       ALPHA
							 | 
						||
| 
								 | 
							
								                                 //  ----------------------------------------------------
							 | 
						||
| 
								 | 
							
								        Src,                     //  cs                          as
							 | 
						||
| 
								 | 
							
								        SrcOver,                 //  cs + cd * (1 - as)          as + ad * (1 - as)
							 | 
						||
| 
								 | 
							
								        SrcOver_Multiply,        //  cs * cd + cd * (1 - as)     as + ad * (1 - as)
							 | 
						||
| 
								 | 
							
								        SrcOver_Screen,          //  cs + cd * (1 - cs)          as + ad * (1 - as)
							 | 
						||
| 
								 | 
							
								        SrcOver_Additive,        //  cs + cs                     as + ad * (1 - as)
							 | 
						||
| 
								 | 
							
								        SrcOver_Dual,            //  cs + cd * (1 - as) [RGB]    as + ad * (1 - as) [RGB]
							 | 
						||
| 
								 | 
							
								                                 //  ----------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Stencil buffer mode
							 | 
						||
| 
								 | 
							
								struct StencilMode
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Stencil disabled
							 | 
						||
| 
								 | 
							
								        Disabled,
							 | 
						||
| 
								 | 
							
								        // Stencil enabled
							 | 
						||
| 
								 | 
							
								        Equal_Keep,
							 | 
						||
| 
								 | 
							
								        // Stencil enabled and incremented
							 | 
						||
| 
								 | 
							
								        Equal_Incr,
							 | 
						||
| 
								 | 
							
								        // Stencil enabled and decremented
							 | 
						||
| 
								 | 
							
								        Equal_Decr,
							 | 
						||
| 
								 | 
							
								        // Set the stencil data to 0
							 | 
						||
| 
								 | 
							
								        Clear,
							 | 
						||
| 
								 | 
							
								        // Stencil disabled and Depth enabled
							 | 
						||
| 
								 | 
							
								        Disabled_ZTest,
							 | 
						||
| 
								 | 
							
								        // Stencil and Depth enabled
							 | 
						||
| 
								 | 
							
								        Equal_Keep_ZTest,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Render state
							 | 
						||
| 
								 | 
							
								union RenderState
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    struct
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        uint8_t colorEnable:1;
							 | 
						||
| 
								 | 
							
								        uint8_t blendMode:3;
							 | 
						||
| 
								 | 
							
								        uint8_t stencilMode:3;
							 | 
						||
| 
								 | 
							
								        uint8_t wireframe:1;
							 | 
						||
| 
								 | 
							
								    } f;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint8_t v;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture wrapping mode
							 | 
						||
| 
								 | 
							
								struct WrapMode
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Clamp between 0.0 and 1.0
							 | 
						||
| 
								 | 
							
								        ClampToEdge,
							 | 
						||
| 
								 | 
							
								        // Out of range texture coordinates return transparent zero (0,0,0,0)
							 | 
						||
| 
								 | 
							
								        ClampToZero,
							 | 
						||
| 
								 | 
							
								        // Wrap to the other side of the texture
							 | 
						||
| 
								 | 
							
								        Repeat,
							 | 
						||
| 
								 | 
							
								        // The same as repeat but flipping horizontally
							 | 
						||
| 
								 | 
							
								        MirrorU,
							 | 
						||
| 
								 | 
							
								        // The same as repeat but flipping vertically
							 | 
						||
| 
								 | 
							
								        MirrorV,
							 | 
						||
| 
								 | 
							
								        // The combination of MirrorU and MirrorV
							 | 
						||
| 
								 | 
							
								        Mirror,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture minification and magnification filter
							 | 
						||
| 
								 | 
							
								struct MinMagFilter
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Select the single pixel nearest to the sample point
							 | 
						||
| 
								 | 
							
								        Nearest,
							 | 
						||
| 
								 | 
							
								        // Select two pixels in each dimension and interpolate linearly between them
							 | 
						||
| 
								 | 
							
								        Linear,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture Mipmap filter
							 | 
						||
| 
								 | 
							
								struct MipFilter
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum Enum
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Texture sampled from mipmap level 0
							 | 
						||
| 
								 | 
							
								        Disabled,
							 | 
						||
| 
								 | 
							
								        // The nearest mipmap level is selected
							 | 
						||
| 
								 | 
							
								        Nearest,
							 | 
						||
| 
								 | 
							
								        // Both nearest levels are sampled and linearly interpolated
							 | 
						||
| 
								 | 
							
								        Linear,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Count
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture sampler state
							 | 
						||
| 
								 | 
							
								union SamplerState
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    struct
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        uint8_t wrapMode:3;
							 | 
						||
| 
								 | 
							
								        uint8_t minmagFilter:1;
							 | 
						||
| 
								 | 
							
								        uint8_t mipFilter:2;
							 | 
						||
| 
								 | 
							
								        uint8_t unused:2;
							 | 
						||
| 
								 | 
							
								    } f;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint8_t v;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Uniform shader values. For unused buffers, 'values' is set to null and 'numDwords' is zero.
							 | 
						||
| 
								 | 
							
								// A hash for the content is given to avoid unnecessary constant buffer updates
							 | 
						||
| 
								 | 
							
								struct UniformData
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    const void* values;
							 | 
						||
| 
								 | 
							
								    uint32_t numDwords;
							 | 
						||
| 
								 | 
							
								    uint32_t hash;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Render batch information
							 | 
						||
| 
								 | 
							
								struct Batch
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // Render state
							 | 
						||
| 
								 | 
							
								    Shader shader;
							 | 
						||
| 
								 | 
							
								    RenderState renderState;
							 | 
						||
| 
								 | 
							
								    uint8_t stencilRef;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Single Pass Stereo renders both left and right eye images at the same time
							 | 
						||
| 
								 | 
							
								    bool singlePassStereo;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Information about the list of indexed triangles to be rendered. The offset in bytes to the
							 | 
						||
| 
								 | 
							
								    // last pointer returned by MapVertices() is stored in 'vertexOffset'. Indices are 16 bits each
							 | 
						||
| 
								 | 
							
								    // and they start at the last pointer returned by MapIndices() plus 'startIndex' x 2 bytes
							 | 
						||
| 
								 | 
							
								    uint32_t vertexOffset;
							 | 
						||
| 
								 | 
							
								    uint32_t numVertices;
							 | 
						||
| 
								 | 
							
								    uint32_t startIndex;
							 | 
						||
| 
								 | 
							
								    uint32_t numIndices;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Textures. Unused textures are set to null
							 | 
						||
| 
								 | 
							
								    Texture* pattern;
							 | 
						||
| 
								 | 
							
								    Texture* ramps;
							 | 
						||
| 
								 | 
							
								    Texture* image;
							 | 
						||
| 
								 | 
							
								    Texture* glyphs;
							 | 
						||
| 
								 | 
							
								    Texture* shadow;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Sampler states corresponding to each texture
							 | 
						||
| 
								 | 
							
								    SamplerState patternSampler;
							 | 
						||
| 
								 | 
							
								    SamplerState rampsSampler;
							 | 
						||
| 
								 | 
							
								    SamplerState imageSampler;
							 | 
						||
| 
								 | 
							
								    SamplerState glyphsSampler;
							 | 
						||
| 
								 | 
							
								    SamplerState shadowSampler;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Vertex and pixel shader uniform buffers
							 | 
						||
| 
								 | 
							
								    UniformData vertexUniforms[2];
							 | 
						||
| 
								 | 
							
								    UniformData pixelUniforms[2];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Custom pointer set in ShaderEffect::SetPixelShader() or BrushShader::SetPixelShader()
							 | 
						||
| 
								 | 
							
								    void* pixelShader;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// A region of the render target with origin located at the lower left corner
							 | 
						||
| 
								 | 
							
								struct Tile
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t x;
							 | 
						||
| 
								 | 
							
								    uint32_t y;
							 | 
						||
| 
								 | 
							
								    uint32_t width;
							 | 
						||
| 
								 | 
							
								    uint32_t height;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Max requested bytes for MapVertices
							 | 
						||
| 
								 | 
							
								#ifndef DYNAMIC_VB_SIZE
							 | 
						||
| 
								 | 
							
								    #define DYNAMIC_VB_SIZE 512 * 1024
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Max requested bytes for MapIndices
							 | 
						||
| 
								 | 
							
								#ifndef DYNAMIC_IB_SIZE
							 | 
						||
| 
								 | 
							
								    #define DYNAMIC_IB_SIZE 128 * 1024
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Max requested bytes for UpdateTexture
							 | 
						||
| 
								 | 
							
								#ifndef DYNAMIC_TEX_SIZE
							 | 
						||
| 
								 | 
							
								    #define DYNAMIC_TEX_SIZE 128 * 1024
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Abstraction of a graphics rendering device
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_RENDER_RENDERDEVICE_API RenderDevice: public BaseComponent
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    RenderDevice();
							 | 
						||
| 
								 | 
							
								    RenderDevice(const RenderDevice&) = delete;
							 | 
						||
| 
								 | 
							
								    RenderDevice& operator=(const RenderDevice&) = delete;
							 | 
						||
| 
								 | 
							
								    ~RenderDevice();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Retrieves device render capabilities
							 | 
						||
| 
								 | 
							
								    virtual const DeviceCaps& GetCaps() const = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Creates render target surface with given dimensions, samples and optional stencil buffer
							 | 
						||
| 
								 | 
							
								    virtual Ptr<RenderTarget> CreateRenderTarget(const char* label, uint32_t width, uint32_t height,
							 | 
						||
| 
								 | 
							
								        uint32_t sampleCount, bool needsStencil) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Creates render target sharing transient (stencil, colorAA) buffers with the given surface
							 | 
						||
| 
								 | 
							
								    virtual Ptr<RenderTarget> CloneRenderTarget(const char* label, RenderTarget* surface) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Creates texture with given dimensions and format. For immutable textures, the content of
							 | 
						||
| 
								 | 
							
								    /// each mipmap is given in 'data'. The passed data is tightly packed (no extra pitch). When
							 | 
						||
| 
								 | 
							
								    /// 'data' is null the texture is considered dynamic and will be updated using UpdateTexture()
							 | 
						||
| 
								 | 
							
								    virtual Ptr<Texture> CreateTexture(const char* label, uint32_t width, uint32_t height,
							 | 
						||
| 
								 | 
							
								        uint32_t numLevels, TextureFormat::Enum format, const void** data) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Updates texture mipmap copying the given data to desired position. The passed data is
							 | 
						||
| 
								 | 
							
								    /// tightly packed (no extra pitch) and is never greater than DYNAMIC_TEX_SIZE bytes.
							 | 
						||
| 
								 | 
							
								    /// Origin is located at the left of the first scanline
							 | 
						||
| 
								 | 
							
								    virtual void UpdateTexture(Texture* texture, uint32_t level, uint32_t x, uint32_t y,
							 | 
						||
| 
								 | 
							
								        uint32_t width, uint32_t height, const void* data) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Begins rendering offscreen commands
							 | 
						||
| 
								 | 
							
								    virtual void BeginOffscreenRender() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Ends rendering offscreen commands
							 | 
						||
| 
								 | 
							
								    virtual void EndOffscreenRender() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Begins rendering onscreen commands
							 | 
						||
| 
								 | 
							
								    virtual void BeginOnscreenRender() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Ends rendering onscreen commands
							 | 
						||
| 
								 | 
							
								    virtual void EndOnscreenRender() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Binds render target and sets viewport to cover the entire surface. The existing content of
							 | 
						||
| 
								 | 
							
								    /// the surface is discarded and replaced with arbitrary data. Surface is not cleared.
							 | 
						||
| 
								 | 
							
								    /// Note that rendering into a RenderTarget will always happen between BeginTile() and EndTile()
							 | 
						||
| 
								 | 
							
								    virtual void SetRenderTarget(RenderTarget* surface) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates that until the next call to EndTile(), all drawing commands will only update the
							 | 
						||
| 
								 | 
							
								    /// contents of the render target defined by the extension of the given tile. This is a good
							 | 
						||
| 
								 | 
							
								    /// place to enable scissoring and apply optimizations for tile-based GPU architectures.
							 | 
						||
| 
								 | 
							
								    virtual void BeginTile(RenderTarget* surface, const Tile& tile) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Completes rendering to the tile specified by BeginTile()
							 | 
						||
| 
								 | 
							
								    virtual void EndTile(RenderTarget* surface) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Resolves multisample render target. Transient surfaces (stencil, colorAA) are discarded.
							 | 
						||
| 
								 | 
							
								    /// Only the specified list of surface regions are resolved
							 | 
						||
| 
								 | 
							
								    virtual void ResolveRenderTarget(RenderTarget* surface, const Tile* tiles, uint32_t numTiles) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets a pointer to stream vertices (bytes <= DYNAMIC_VB_SIZE)
							 | 
						||
| 
								 | 
							
								    /// This function is invoked at least once per frame and for optimal performance it should
							 | 
						||
| 
								 | 
							
								    /// always return direct access to GPU-mapped memory, uncached for the CPU.
							 | 
						||
| 
								 | 
							
								    virtual void* MapVertices(uint32_t bytes) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidates the pointer previously mapped
							 | 
						||
| 
								 | 
							
								    virtual void UnmapVertices() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets a pointer to stream 16-bit indices (bytes <= DYNAMIC_IB_SIZE)
							 | 
						||
| 
								 | 
							
								    /// This function is invoked at least once per frame and for optimal performance it should
							 | 
						||
| 
								 | 
							
								    /// always return direct access to GPU-mapped memory, uncached for the CPU.
							 | 
						||
| 
								 | 
							
								    virtual void* MapIndices(uint32_t bytes) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidates the pointer previously mapped
							 | 
						||
| 
								 | 
							
								    virtual void UnmapIndices() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Draws primitives for the given batch
							 | 
						||
| 
								 | 
							
								    virtual void DrawBatch(const Batch& batch) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Width of offscreen textures (0 = automatic). Default is automatic
							 | 
						||
| 
								 | 
							
								    void SetOffscreenWidth(uint32_t width);
							 | 
						||
| 
								 | 
							
								    uint32_t GetOffscreenWidth() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Height of offscreen textures (0 = automatic). Default is automatic
							 | 
						||
| 
								 | 
							
								    void SetOffscreenHeight(uint32_t height);
							 | 
						||
| 
								 | 
							
								    uint32_t GetOffscreenHeight() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Multisampling of offscreen textures. Default is 1x
							 | 
						||
| 
								 | 
							
								    void SetOffscreenSampleCount(uint32_t sampleCount);
							 | 
						||
| 
								 | 
							
								    uint32_t GetOffscreenSampleCount() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Number of offscreen textures created at startup. Default is 0
							 | 
						||
| 
								 | 
							
								    void SetOffscreenDefaultNumSurfaces(uint32_t numSurfaces);
							 | 
						||
| 
								 | 
							
								    uint32_t GetOffscreenDefaultNumSurfaces() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Maximum number of offscreen textures (0 = unlimited). Default is unlimited
							 | 
						||
| 
								 | 
							
								    void SetOffscreenMaxNumSurfaces(uint32_t numSurfaces);
							 | 
						||
| 
								 | 
							
								    uint32_t GetOffscreenMaxNumSurfaces() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Width of texture used to cache glyphs. Default is 1024
							 | 
						||
| 
								 | 
							
								    void SetGlyphCacheWidth(uint32_t width);
							 | 
						||
| 
								 | 
							
								    uint32_t GetGlyphCacheWidth() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Height of texture used to cache glyphs. Default is 1024
							 | 
						||
| 
								 | 
							
								    void SetGlyphCacheHeight(uint32_t height);
							 | 
						||
| 
								 | 
							
								    uint32_t GetGlyphCacheHeight() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Vector graphics context
							 | 
						||
| 
								 | 
							
								    void SetVGContext(BaseComponent* context);
							 | 
						||
| 
								 | 
							
								    BaseComponent* GetVGContext() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Destroyed delegate
							 | 
						||
| 
								 | 
							
								    typedef Delegate<void (RenderDevice*)> DeviceDestroyedDelegate;
							 | 
						||
| 
								 | 
							
								    DeviceDestroyedDelegate& DeviceDestroyed();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    /// Returns whether the passed render state is compatible with the given shader
							 | 
						||
| 
								 | 
							
								    bool IsValidState(Shader shader, RenderState state) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool IsValidBlendMode(Shader shader, BlendMode::Enum blendMode) const;
							 | 
						||
| 
								 | 
							
								    bool IsValidStencilMode(Shader shader, StencilMode::Enum stencilMode) const;
							 | 
						||
| 
								 | 
							
								    bool IsValidColorEnable(Shader shader, bool colorEnable) const;
							 | 
						||
| 
								 | 
							
								    bool IsValidWireframe(Shader shader, bool wireframe) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int32_t OnDestroy() override;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    uint32_t mOffscreenWidth;
							 | 
						||
| 
								 | 
							
								    uint32_t mOffscreenHeight;
							 | 
						||
| 
								 | 
							
								    uint32_t mOffscreenSampleCount;
							 | 
						||
| 
								 | 
							
								    uint32_t mOffscreenDefaultNumSurfaces;
							 | 
						||
| 
								 | 
							
								    uint32_t mOffscreenMaxNumSurfaces;
							 | 
						||
| 
								 | 
							
								    uint32_t mGlyphCacheWidth;
							 | 
						||
| 
								 | 
							
								    uint32_t mGlyphCacheHeight;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Ptr<BaseComponent> mVGContext;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DeviceDestroyedDelegate mDeviceDestroyed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(RenderDevice, BaseComponent)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |