preview renderer working, FINALLY
This commit is contained in:
@@ -62,4 +62,6 @@ void camera_set_euler_look(Camera* camera, float roll,
|
||||
void camera_set_look(Camera* camera,
|
||||
glm::vec3 look_direction);
|
||||
|
||||
glm::vec3 camera_get_position(Camera* camera);
|
||||
|
||||
} // namespace inferno::graphics
|
||||
|
||||
@@ -35,19 +35,20 @@ InfernoApp* inferno_create()
|
||||
graphics::window_create("Inferno v" INFERNO_VERSION, 1280, 720);
|
||||
|
||||
// setup the scene
|
||||
scene::Material basicMaterial("basic");
|
||||
scene::Material* basicMaterial = new scene::Material("basic");
|
||||
graphics::Shader* basicShader = graphics::shader_create();
|
||||
graphics::shader_load(basicShader, "res/shaders/basic.glsl");
|
||||
graphics::shader_link(basicShader);
|
||||
basicMaterial->setGlShader(basicShader);
|
||||
|
||||
scene::Mesh mesh;
|
||||
mesh.loadOBJ("res/cornell-box.obj");
|
||||
// mesh.loadOBJ("res/sponza.obj");
|
||||
mesh.ready();
|
||||
mesh.setMaterial(&basicMaterial);
|
||||
scene::Mesh* mesh = new scene::Mesh;
|
||||
// mesh->loadOBJ("res/cornell-box.obj");
|
||||
mesh->loadOBJ("res/sponza.obj");
|
||||
mesh->ready();
|
||||
mesh->setMaterial(basicMaterial);
|
||||
|
||||
scene::SceneObject* object = scene::scene_object_create();
|
||||
scene::scene_object_add_mesh(object, &mesh);
|
||||
scene::scene_object_add_mesh(object, mesh);
|
||||
|
||||
scene::scene_add_object(app->Scene, object);
|
||||
|
||||
@@ -198,6 +199,63 @@ int inferno_run(InfernoApp* app)
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
if (showRenderSettings && ImGui::Begin("Inferno HART")) {
|
||||
if (ImGui::TreeNode("Camera")) {
|
||||
ImGui::PushItemWidth(100);
|
||||
ImGui::Text("Camera Position X,Y,Z");
|
||||
|
||||
graphics::Camera* camera = scene::scene_get_camera(app->Scene);
|
||||
|
||||
bool positionUpdated = false;
|
||||
ImGui::DragFloat("X", &camera->Position.x, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsItemEdited())
|
||||
positionUpdated = true;
|
||||
ImGui::DragFloat("Y", &camera->Position.y, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsItemEdited())
|
||||
positionUpdated = true;
|
||||
ImGui::DragFloat("Z", &camera->Position.z, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
if (ImGui::IsItemEdited())
|
||||
positionUpdated = true;
|
||||
if (positionUpdated)
|
||||
graphics::camera_set_position(camera, graphics::camera_get_position(camera));
|
||||
|
||||
bool viewUpdated = false;
|
||||
ImGui::Text("Camera Look Yaw, Pitch, Roll");
|
||||
ImGui::DragFloat("Yaw", &camera->Yaw, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsItemEdited())
|
||||
viewUpdated = true;
|
||||
ImGui::DragFloat("Pitch", &camera->Pitch, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsItemEdited())
|
||||
viewUpdated = true;
|
||||
ImGui::DragFloat("Roll", &camera->Roll, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
|
||||
if (ImGui::IsItemEdited())
|
||||
viewUpdated = true;
|
||||
|
||||
ImGui::PopItemWidth();
|
||||
ImGui::PushItemWidth(300);
|
||||
|
||||
ImGui::Text("Camera Zoom");
|
||||
ImGui::DragFloat("Zoom", &camera->FOV, -0.1f, 0.01f, 180.0f, "%.2f", ImGuiSliderFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsItemEdited())
|
||||
viewUpdated = true;
|
||||
if (viewUpdated)
|
||||
graphics::camera_update(camera);
|
||||
|
||||
ImGui::PopItemWidth();
|
||||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
if (showDemoWindow) {
|
||||
ImGui::ShowDemoWindow();
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
GLenum err;
|
||||
while((err = glGetError()) != GL_NO_ERROR) {
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
#include <algorithm>
|
||||
#include <scene/camera.hpp>
|
||||
#include <scene/material.hpp>
|
||||
#include <scene/scene.hpp>
|
||||
#include <scene/object.hpp>
|
||||
#include <scene/mesh.hpp>
|
||||
#include <scene/object.hpp>
|
||||
#include <scene/scene.hpp>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
@@ -111,10 +111,21 @@ void preview_draw(PreviewRenderer* renderer, scene::Scene* scene)
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
for (scene::SceneObject* o : scene::scene_get_renderables(scene)) {
|
||||
yolo::info("Rendering object: {}", o);
|
||||
for (scene::Mesh* m : scene::scene_object_get_meshs(o)) {
|
||||
yolo::info("Rendering mesh: {}", m);
|
||||
yolo::debug("Mesh VAO: {}, EBO: {}, Indicies: {}", m->getVAO(), m->getEBO(), m->getIndexCount());
|
||||
graphics::Shader* shader = m->getMaterial()->getGlShader();
|
||||
graphics::shader_use(shader);
|
||||
|
||||
auto viewMatrix = graphics::camera_get_view(scene::scene_get_camera(scene));
|
||||
auto projMatrix = graphics::camera_get_projection(scene::scene_get_camera(scene));
|
||||
|
||||
GLint uniTrans = glGetUniformLocation(graphics::shader_get_program(shader), "model");
|
||||
glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(glm::mat4(1.0f)));
|
||||
|
||||
GLint uniView = glGetUniformLocation(graphics::shader_get_program(shader), "view");
|
||||
glUniformMatrix4fv(uniView, 1, GL_FALSE, glm::value_ptr(viewMatrix));
|
||||
|
||||
GLint uniProj = glGetUniformLocation(graphics::shader_get_program(shader), "proj");
|
||||
glUniformMatrix4fv(uniProj, 1, GL_FALSE, glm::value_ptr(projMatrix));
|
||||
|
||||
glBindVertexArray(m->getVAO());
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->getEBO());
|
||||
|
||||
@@ -150,6 +150,11 @@ void shader_link(Shader* shader)
|
||||
glLinkProgram(shader->Program);
|
||||
}
|
||||
|
||||
GLuint shader_get_program(Shader* shader)
|
||||
{
|
||||
return shader->Program;
|
||||
}
|
||||
|
||||
void shader_add_attribute(Shader* shader, const std::string& attribute)
|
||||
{
|
||||
shader->Attributes[attribute] = glGetAttribLocation(shader->Program, attribute.c_str());
|
||||
|
||||
@@ -29,6 +29,9 @@ void shader_cleanup(Shader* shader);
|
||||
|
||||
void shader_load(Shader* shader, std::filesystem::path path);
|
||||
void shader_link(Shader* shader);
|
||||
|
||||
GLuint shader_get_program(Shader* shader);
|
||||
|
||||
// TODO: Implement shader_reload
|
||||
void shader_add_attribute(Shader* shader, const std::string& attribute);
|
||||
void shader_add_uniform(Shader* shader, const std::string& uniform);
|
||||
|
||||
@@ -221,4 +221,9 @@ void camera_set_look(Camera* camera, glm::vec3 look_direction)
|
||||
camera_update(camera);
|
||||
}
|
||||
|
||||
glm::vec3 camera_get_position(Camera* camera)
|
||||
{
|
||||
return camera->Position;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,13 +15,13 @@ Material::~Material()
|
||||
|
||||
}
|
||||
|
||||
//void Material::setGlShader(Shader* shader)
|
||||
//{
|
||||
//mGlShader = shader;
|
||||
//}
|
||||
|
||||
//Shader* Material::getGlShader()
|
||||
//{
|
||||
//return mGlShader;
|
||||
//}
|
||||
void Material::setGlShader(graphics::Shader* shader)
|
||||
{
|
||||
mGlShader = shader;
|
||||
}
|
||||
|
||||
graphics::Shader* Material::getGlShader()
|
||||
{
|
||||
return mGlShader;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,12 @@
|
||||
|
||||
#include <hart_graphics.hpp>
|
||||
|
||||
namespace inferno::graphics {
|
||||
class Shader;
|
||||
};
|
||||
|
||||
namespace inferno::scene {
|
||||
|
||||
//class Shader;
|
||||
class HitInfo;
|
||||
|
||||
class Material {
|
||||
@@ -15,14 +18,14 @@ public:
|
||||
~Material();
|
||||
|
||||
std::string getName();
|
||||
//void setGlShader(Shader* shader);
|
||||
//Shader* getGlShader();
|
||||
void setGlShader(graphics::Shader* shader);
|
||||
graphics::Shader* getGlShader();
|
||||
|
||||
glm::vec3 sample(HitInfo* hit);
|
||||
|
||||
private:
|
||||
std::string mName;
|
||||
//Shader* mGlShader;
|
||||
graphics::Shader* mGlShader;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <filesystem>
|
||||
|
||||
|
||||
@@ -230,7 +230,6 @@ void ObjLoader::load(std::filesystem::path file)
|
||||
|
||||
int ObjLoader::getIndexCount()
|
||||
{
|
||||
yolo::debug("Face count: {}", mFaces.size());
|
||||
return (int)mFaces.size() * 3;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ void scene_add_object(Scene* scene, SceneObject* object)
|
||||
{
|
||||
yolo::debug("Using scene {}", scene);
|
||||
yolo::debug("Adding object to scene, no Objects: {}, adding to pool of: {}", object->Meshs.size(), scene->Objects.size());
|
||||
yolo::debug("Object Mesh 0 is {}", object->Meshs[0]);
|
||||
scene->Objects.push_back(object);
|
||||
scene->DidUpdate = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user