/*---------------------------------------------------------------------------* Project: Horizon File: demo_RenderSystemDrawing.h Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 46365 $ *---------------------------------------------------------------------------*/ #ifndef DEMO_RENDER_SYSTEM_DRAWING_H_ #define DEMO_RENDER_SYSTEM_DRAWING_H_ #include "demo/Utility/demo_Utility.h" #include "demo/Render/demo_RenderSystem.h" #include "demo/Render/demo_GraphicsDrawing.h" namespace demo { /* Please see man pages for details */ /* Please see man pages for details */ const u32 MAX_TEXTURES_NUM = 16; /* Please see man pages for details */ const u32 MAX_TEXTURED_TRIANGLES_NUM = 64; /* Please see man pages for details */ const u32 MAX_TEXTURED_INDICES_NUM = MAX_TEXTURED_TRIANGLES_NUM * 3; class RenderSystemDrawing : public demo::RenderSystem { public: RenderSystemDrawing(void); virtual ~RenderSystemDrawing(void); public: virtual void Initialize(const uptr fcramAddress, const size_t memorySize, const u32 commandBufferSize = 0x40000, const u32 requestNum = 128, const bool serialRunMode = true, const DisplayBuffersDescription& displayBuffers0Desc = DisplayBuffersDescription::GetDefaultDisplay0Description(), const DisplayBuffersDescription& displayBuffers1Desc = DisplayBuffersDescription::GetDefaultDisplay1Description(), const FrameBufferDescription& frameBuffer0Desc = FrameBufferDescription::GetDefaultDisplay0FrameBufferDescription(), const DisplayBuffersDescription& displayBuffers0ExtDesc = DisplayBuffersDescription::GetDefaultDisplay0ExtDescription(), const bool isFillBlackLCD = true ); public: /* Please see man pages for details */ void InitializeTriangles(const u32 maxTrianglesNum = demo::MAX_TRIANGLES_NUM); /* Please see man pages for details */ void InitializeSquares(const u32 maxSquaresNum = demo::MAX_SQUARES_NUM); /* Please see man pages for details */ void InitializeTexts(const u32 maxLength = demo::MAX_TEXT_LENGTH); /* Please see man pages for details */ void InitializeTexturedTriangles(const u32 maxTrianglesNum = MAX_TEXTURED_TRIANGLES_NUM); virtual void Finalize(void); virtual void SetViewport(const GLint x, const GLint y, const GLsizei width, const GLsizei height); virtual void SetClearColor(const s32 display, const f32 red, const f32 green, const f32 blue, const f32 alpha); virtual void Clear(const GLbitfield mask = (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) ); public: /* Please see man pages for details */ virtual void SetColor(const f32 red, const f32 green, const f32 blue, const f32 alpha); /* Please see man pages for details */ virtual void SetColor(const f32 red, const f32 green, const f32 blue); /* Please see man pages for details */ virtual void SetDepth(const f32 depth); /* Please see man pages for details */ virtual void SetAutoDepth(const bool enableAutoDepth); public: /* Please see man pages for details */ virtual void SetPointSize(const f32 pointSize); /* Please see man pages for details */ virtual void DrawPoint(const f32 windowCoordinateX, const f32 windowCoordinateY); public: /* Please see man pages for details */ virtual void SetLineWidth(const f32 lineWidth); /* Please see man pages for details */ virtual void DrawLine(const f32 windowCoordinateX0, const f32 windowCoordinateY0, const f32 windowCoordinateX1, const f32 windowCoordinateY1); public: /* Please see man pages for details */ virtual void FillSquare(const f32 windowCoordinateX0, const f32 windowCoordinateY0, const f32 windowCoordinateX1, const f32 windowCoordinateY1, const f32 windowCoordinateX2, const f32 windowCoordinateY2, const f32 windowCoordinateX3, const f32 windowCoordinateY3); public: /* Please see man pages for details */ virtual void FillRectangle(const f32 windowCoordinateX, const f32 windowCoordinateY, const f32 width, const f32 height); public: /* Please see man pages for details */ virtual void FillTriangle(const f32 windowCoordinateX0, const f32 windowCoordinateY0, const f32 windowCoordinateX1, const f32 windowCoordinateY1, const f32 windowCoordinateX2, const f32 windowCoordinateY2); public: /* Please see man pages for details */ virtual void SetFontSize(const f32 fontSize); /* Please see man pages for details */ virtual void DrawText(const f32 windowCoordinateX, const f32 windowCoordinateY, const char* format, ...); public: /* Please see man pages for details */ virtual bool HasTexture(const GLuint textureId); /* Please see man pages for details */ virtual bool GenerateTexture(const GLenum target, const GLenum internalFormat, const GLsizei width, const GLsizei height, const GLenum format, const GLenum type, void* pixels, GLuint& textureId); /* Please see man pages for details */ virtual bool DeleteTexture(const GLuint textureId); protected: virtual bool FindTextureArrayIndex(const GLuint textureId, u32& arrayIndex); public: /* Please see man pages for details */ virtual void FillTexturedRectangle(const GLuint textureId, const f32 windowCoordinateX, const f32 windowCoordinateY, const f32 rectangleWidth, const f32 rectangleHeight, const f32 imageWidth, const f32 imageHeight, const f32 textureWidth, const f32 textureHeight); /* Please see man pages for details */ virtual void FillTexturedTriangle(const GLuint textureId, const f32 windowCoordinateX0, const f32 windowCoordinateY0, const f32 texcoordS0, const f32 texcoordT0, const f32 windowCoordinateX1, const f32 windowCoordinateY1, const f32 texcoordS1, const f32 texcoordT1, const f32 windowCoordinateX2, const f32 windowCoordinateY2, const f32 texcoordS2, const f32 texcoordT2); /* Please see man pages for details */ public: virtual void SwapBuffers(void); protected: virtual void Flush(void); virtual void FlushTexturedPrimitives(void); protected: GraphicsDrawing m_GraphicsDrawing; protected: bool m_InitializeTexturedTriangles; bool m_UseDecalTextureProgram; bool m_Padding[2]; u32 m_MaxTexturedTrianglesNum; GLuint m_TextureIdArray[demo::MAX_TEXTURES_NUM]; u32 m_TotalTexturedTrianglesNumArray[demo::MAX_TEXTURES_NUM]; demo::TrianglesRenderData m_TexturedTrianglesRenderDataArray[demo::MAX_TEXTURES_NUM]; f32 m_ClearColorArray[3][4]; }; } #endif