Testing textures and events

This commit is contained in:
2022-10-20 15:49:25 -07:00
parent 375b25ff59
commit 80d6cba854
27 changed files with 513 additions and 26 deletions

View File

@ -12,7 +12,9 @@ using namespace Dawn;
Camera::Camera(SceneItem &item) :
SceneItemComponent(item)
{
this->updateProjection();
this->getRenderTarget().eventRenderTargetResized.addListener(
this, &Camera::onRenderTargetResize
);
}
void Camera::updateProjection() {
@ -54,6 +56,18 @@ RenderTarget & Camera::getRenderTarget() {
return *this->target;
}
void Camera::setRenderTarget(std::shared_ptr<RenderTarget> renderTarget) {
if(renderTarget == this->target) return;
this->getRenderTarget().eventRenderTargetResized.removeListener(
this, &Camera::onRenderTargetResize
);
this->target = renderTarget;
this->getRenderTarget().eventRenderTargetResized.addListener(
this, &Camera::onRenderTargetResize
);
this->updateProjection();
}
float_t Camera::getAspect() {
RenderTarget &target = this->getRenderTarget();
return target.getWidth() / target.getHeight();
@ -61,4 +75,14 @@ float_t Camera::getAspect() {
void Camera::start() {
this->updateProjection();
}
void Camera::onRenderTargetResize(RenderTarget &target, float_t w, float_t h) {
this->updateProjection();
}
Camera::~Camera() {
this->getRenderTarget().eventRenderTargetResized.removeListener(
this, &Camera::onRenderTargetResize
);
}

View File

@ -14,9 +14,13 @@ namespace Dawn {
};
class Camera : public SceneItemComponent {
protected:
std::shared_ptr<RenderTarget> target = nullptr;
void onRenderTargetResize(RenderTarget &target, float_t w, float_t h);
public:
glm::mat4 projection;
std::shared_ptr<RenderTarget> target = nullptr;
// Perspective
enum CameraType type = CAMERA_TYPE_PERSPECTIVE;
@ -55,6 +59,13 @@ namespace Dawn {
*/
RenderTarget & getRenderTarget();
/**
* Updates the render target for the camera to use.
*
* @param renderTarget Render target for this camera to draw to.
*/
void setRenderTarget(std::shared_ptr<RenderTarget> renderTarget);
/**
* Returs the aspect ratio of the camera.
*
@ -66,5 +77,10 @@ namespace Dawn {
* Event triggered by the scene item when the item is added to the scene.
*/
void start() override;
/**
* Disposes a previously initialized camera.
*/
~Camera();
};
}

View File

@ -46,6 +46,10 @@ void Material::setShaderParameters() {
case SHADER_PARAMETER_TYPE_VECTOR3:
this->shader->setVector3(it->first, this->vec3Values[it->first]);
break;
case SHADER_PARAMETER_TYPE_TEXTURE:
this->shader->setTexture(it->first, this->textureValues[it->first]);
break;
default:
throw "An unsupported or invalid shader parameter type was supplied.";

View File

@ -26,6 +26,7 @@ namespace Dawn {
std::map<shaderparameter_t, bool_t> boolValues;
std::map<shaderparameter_t, glm::mat4> matrixValues;
std::map<shaderparameter_t, glm::vec3> vec3Values;
std::map<shaderparameter_t, std::shared_ptr<Texture>> textureValues;
/**
* Material component constructor.