Documenting done.
This commit is contained in:
@ -18,15 +18,28 @@ namespace Dawn {
|
||||
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Construct the back buffer render target.
|
||||
*
|
||||
* @param renderManager Render Manager for this back buffer target.
|
||||
*/
|
||||
BackBufferRenderTarget(RenderManager &renderManager);
|
||||
|
||||
/**
|
||||
* Requests to modify the viewport directly. This is mostly to be called
|
||||
* by whatever is setting the window/display resolution, so that the
|
||||
* backbuffer can keep track of what the viewport size is. This should
|
||||
* also be DPI aware, e.g. "4k @ 2xDPI, resulting in a 1080p equiv" should
|
||||
* still call this method with 3840, 2160.
|
||||
*
|
||||
* @param width New width of the back buffer.
|
||||
* @param height New height of the back buffer.
|
||||
*/
|
||||
void setSize(float_t width, float_t height);
|
||||
|
||||
float_t getWidth() override;
|
||||
float_t getHeight() override;
|
||||
|
||||
void setSize(float_t width, float_t height);
|
||||
|
||||
void setClearColor(struct Color color);
|
||||
|
||||
void setClearColor(struct Color color) override;
|
||||
void clear(flag8_t clearFlags) override;
|
||||
void bind() override;
|
||||
};
|
||||
|
@ -11,60 +11,4 @@ using namespace Dawn;
|
||||
StandardRenderPipeline::StandardRenderPipeline(RenderManager &renderManager) :
|
||||
RenderPipeline(renderManager)
|
||||
{
|
||||
}
|
||||
|
||||
void StandardRenderPipeline::renderScene(Scene &scene) {
|
||||
RenderTarget &backBuffer = this->renderManager.getBackBuffer();
|
||||
auto cameras = scene.findComponents<Camera>();
|
||||
std::shared_ptr<Camera> backBufferCamera = nullptr;
|
||||
|
||||
// First, render all non-backbuffer cameras.
|
||||
auto it = cameras.begin();
|
||||
while(it != cameras.end()) {
|
||||
RenderTarget &cameraTarget = (*it)->getRenderTarget();
|
||||
|
||||
// Leave the backbuffer camera(s) to last, so we skip them.
|
||||
if(&cameraTarget == &backBuffer) {
|
||||
backBufferCamera = *it;
|
||||
} else {
|
||||
this->renderSceneCamera(scene, **it);
|
||||
}
|
||||
|
||||
++it;
|
||||
}
|
||||
|
||||
// Now render the backbuffer camera.
|
||||
if(backBufferCamera == nullptr) return;
|
||||
this->renderSceneCamera(scene, *backBufferCamera);
|
||||
}
|
||||
|
||||
void StandardRenderPipeline::renderSceneCamera(Scene &scene, Camera &camera) {
|
||||
RenderTarget &renderTarget = camera.getRenderTarget();
|
||||
renderTarget.bind();
|
||||
renderTarget.clear(
|
||||
RENDER_TARGET_CLEAR_FLAG_DEPTH |
|
||||
RENDER_TARGET_CLEAR_FLAG_COLOR
|
||||
);
|
||||
|
||||
auto meshes = scene.findComponents<MeshRenderer>();
|
||||
auto it = meshes.begin();
|
||||
while(it != meshes.end()) {
|
||||
auto mesh = *it;
|
||||
auto item = mesh->item;
|
||||
auto material = item.getComponent<Material>();
|
||||
|
||||
// TODO: fallback material?
|
||||
if(material == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto shader = material->getShader();
|
||||
shader->bind();
|
||||
shader->setGlobalParameters(camera.projection, camera.item.transform);
|
||||
shader->setMeshParameters(item.transform);
|
||||
material->setShaderParameters();
|
||||
|
||||
mesh->mesh->draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
||||
++it;
|
||||
}
|
||||
}
|
@ -11,8 +11,5 @@ namespace Dawn {
|
||||
class StandardRenderPipeline : public RenderPipeline {
|
||||
public:
|
||||
StandardRenderPipeline(RenderManager &renderManager);
|
||||
|
||||
void renderScene(Scene &scene) override;
|
||||
void renderSceneCamera(Scene &scene, Camera &camera) override;
|
||||
};
|
||||
}
|
@ -23,10 +23,14 @@ namespace Dawn {
|
||||
GLuint shaderProgram = -1;
|
||||
|
||||
protected:
|
||||
void compileShader(
|
||||
std::string vertexShader,
|
||||
std::string fragmentShader
|
||||
);
|
||||
/**
|
||||
* Compiles a GLSL shader and stores it on the GPU, updates the underlying
|
||||
* pointers for you.
|
||||
*
|
||||
* @param vertexShader The string source of the vertex shader.
|
||||
* @param fragmentShader The string source of the fragment shader.
|
||||
*/
|
||||
void compileShader(std::string vertexShader, std::string fragmentShader);
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -37,13 +41,21 @@ namespace Dawn {
|
||||
*/
|
||||
shaderparameter_t getParameterByName(std::string name);
|
||||
|
||||
void bind() override;
|
||||
/**
|
||||
* Method to request that this shader be compiled and put on the GPU. This
|
||||
* method should call the protected compileShader method.
|
||||
*/
|
||||
virtual void compile() = 0;
|
||||
|
||||
void bind() override;
|
||||
void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override;
|
||||
void setBoolean(shaderparameter_t parameter, bool_t value) override;
|
||||
void setColor(shaderparameter_t parameter, struct Color color) override;
|
||||
void setVector3(shaderparameter_t parameter, glm::vec3 vector) override;
|
||||
|
||||
~Shader();
|
||||
/**
|
||||
* Destroys and deletes the shader from the GPU.
|
||||
*/
|
||||
virtual ~Shader();
|
||||
};
|
||||
}
|
@ -23,8 +23,8 @@ namespace Dawn {
|
||||
std::map<shaderparameter_t, enum ShaderParameterType> ps;
|
||||
|
||||
ps[this->paramColor] = SHADER_PARAMETER_TYPE_COLOR;
|
||||
ps[this->paramHasTexture] = SHADER_PARAMETER_TYPE_BOOLEAN;
|
||||
// ps[paramTexture] SHADER_PARAMETER_TYPE_TEXTURE;
|
||||
// ps[this->paramHasTexture] = SHADER_PARAMETER_TYPE_BOOLEAN;
|
||||
|
||||
return ps;
|
||||
}
|
||||
|
Reference in New Issue
Block a user