Skylicht Engine
Loading...
Searching...
No Matches
CBaseRP.h
1/*
2!@
3MIT License
4
5Copyright (c) 2019 Skylicht Technology CO., LTD
6
7Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
8(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
9merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
10subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
15INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
20This file is part of the "Skylicht Engine".
21https://github.com/skylicht-lab/skylicht-engine
22!#
23*/
24
25#pragma once
26
27#include "IRenderPipeline.h"
28#include "Entity/CEntityManager.h"
29
30namespace Skylicht
31{
32 class SKYLICHT_API CBaseRP : public IRenderPipeline
33 {
34 protected:
35 IRenderPipeline* m_next;
36
38 IVertexBuffer* m_verticesImage;
39 IIndexBuffer* m_indicesImage;
40
41 float m_viewport2DW;
42 float m_viewport2DH;
43
44 SMaterial m_unbindMaterial;
45
46 int m_textureColorShaderID;
47
48 static bool s_bakeMode;
49 static bool s_bakeLMMode;
50 static u32 s_bakeBounce;
51 static u32 s_maxLight;
52 static SColor s_clearColor;
53
54 public:
55 CBaseRP();
56
57 virtual ~CBaseRP();
58
59 virtual bool canRenderMaterial(CMaterial* m);
60
61 virtual bool canRenderShader(CShader* s);
62
63 virtual void render(ITexture* target, CCamera* camera, CEntityManager* entityManager, const core::recti& vp, int cubeFaceId = -1, IRenderPipeline* lastRP = NULL) = 0;
64
65 virtual void setCamera(CCamera* camera);
66
67 virtual void setNextPipeLine(IRenderPipeline* next);
68
69 virtual void onNext(ITexture* target, CCamera* camera, CEntityManager* entity, const core::recti& vp, int cubeFaceId);
70
71 virtual void drawMeshBuffer(CMesh* mesh, int bufferID, CEntityManager* entity, int entityID, bool skinnedMesh);
72
73 virtual void drawInstancingMeshBuffer(CMesh* mesh, int bufferID, CShader* instancingShader, CEntityManager* entityMgr, int entityID, bool skinnedMesh);
74
75 public:
76
77 virtual void updateTextureResource(CMesh* mesh, int bufferID, CEntityManager* entity, int entityID, bool skinnedMesh);
78
79 virtual void updateShaderResource(CShader* shader, CEntityManager* entity, int entityID, video::SMaterial& irrMaterial);
80
81 void beginRender2D(float w, float h);
82
83 void renderBufferToTarget(float sx, float sy, float sw, float sh, SMaterial& material, bool flipY = true, bool flipX = false);
84
85 void renderBufferToTarget(float dx, float dy, float dw, float dh, float sx, float sy, float sw, float sh, SMaterial& material, bool flipY = true, bool flipX = false);
86
87 void renderEnvironment(CCamera* camera, CEntityManager* entityMgr, const core::vector3df& position, ITexture* texture[], int* face, int numFace, bool allPipeline);
88
89 void renderCubeEnvironment(CCamera* camera, CEntityManager* entityMgr, const core::vector3df& position, ITexture* texture, int* face, int numFace, bool allPipeline);
90
91 static void saveFBOToFile(ITexture* texture, const char* output);
92
93 static void setBakeMode(bool b);
94
95 static void setBakeLightmapMode(bool b);
96
97 static void setBakeLightingMapBounce(u32 i);
98
99 static void setClearColor(const SColor& c);
100
101 static void setMaxLight(u32 maxLights);
102
103 void unbindRTT();
104
105 protected:
106
107 void disableTextureBilinear(SMaterial& m, int slot);
108
109 void enableTextureBilinear(SMaterial& m, int slot);
110
111 void setTarget(ITexture* target, int faceId);
112
113 void drawSceneToTexture(ITexture* target, CCamera* camera, CEntityManager* entityMgr, bool allPipeline);
114
115 void drawSceneToCubeTexture(ITexture* target, CCamera* camera, video::E_CUBEMAP_FACE faceID, CEntityManager* entityMgr, bool allPipeline);
116 };
117}
This is an object class used to set up the camera, including its position, viewing angle,...
Definition CCamera.h:70
This object class manages all entities within a scene.
Definition CEntityManager.h:89
The object class describes material information such as which shader it's associated with,...
Definition CMaterial.h:84
Definition CMesh.h:75
Represents a programmable shader, including uniforms, UI, resources, instancing and platform-specific...
Definition CShader.h:198
Implementation of the IMeshBuffer interface.
Definition CMeshBuffer.h:18
Definition IIndexBuffer.h:25
Definition IVertexBuffer.h:17
Interface of a Video Driver dependent Texture.
Definition ITexture.h:119
Class representing a 32 bit ARGB color.
Definition SColor.h:285
Struct for holding parameters for a material renderer.
Definition SMaterial.h:255
Everything in the Skylicht Engine. You can start by looking at the topics.
Definition AudioDebugLog.h:29
vector3d< f32 > vector3df
Typedef for a f32 3d vector.
Definition vector3d.h:445
rect< s32 > recti
Rectangle with int values.
Definition rect.h:273
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.h:58