for some reason the face count is uninitialised
This commit is contained in:
161
src/inferno.cpp
161
src/inferno.cpp
@@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#include "preview_renderer/renderer.hpp"
|
#include "preview_renderer/renderer.hpp"
|
||||||
#include "preview_renderer/shader.hpp"
|
#include "preview_renderer/shader.hpp"
|
||||||
#include "scene/scene.hpp"
|
|
||||||
#include "scene/camera.hpp"
|
#include "scene/camera.hpp"
|
||||||
#include "scene/material.hpp"
|
#include "scene/material.hpp"
|
||||||
#include "scene/mesh.hpp"
|
#include "scene/mesh.hpp"
|
||||||
|
#include "scene/scene.hpp"
|
||||||
|
|
||||||
#include <yolo/yolo.hpp>
|
#include <yolo/yolo.hpp>
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@ InfernoApp* inferno_create()
|
|||||||
|
|
||||||
InfernoApp* app = new InfernoApp;
|
InfernoApp* app = new InfernoApp;
|
||||||
app->Input = new InfernoInput;
|
app->Input = new InfernoInput;
|
||||||
|
app->Scene = scene::scene_create();
|
||||||
|
|
||||||
// Create window
|
// Create window
|
||||||
graphics::window_create("Inferno v" INFERNO_VERSION, 1280, 720);
|
graphics::window_create("Inferno v" INFERNO_VERSION, 1280, 720);
|
||||||
@@ -39,19 +40,19 @@ InfernoApp* inferno_create()
|
|||||||
graphics::shader_load(basicShader, "res/shaders/basic.glsl");
|
graphics::shader_load(basicShader, "res/shaders/basic.glsl");
|
||||||
graphics::shader_link(basicShader);
|
graphics::shader_link(basicShader);
|
||||||
|
|
||||||
app->Scene = scene::scene_create();
|
scene::Mesh 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::SceneObject* object = scene::scene_object_create();
|
||||||
|
scene::scene_object_add_mesh(object, &mesh);
|
||||||
|
|
||||||
scene::Mesh cornell;
|
|
||||||
cornell.loadOBJ("res/cornell-box.obj");
|
|
||||||
// cornell.loadOBJ("res/sponza.obj");
|
|
||||||
cornell.ready();
|
|
||||||
cornell.setMaterial(&basicMaterial);
|
|
||||||
scene::scene_object_add_mesh(object, &cornell);
|
|
||||||
|
|
||||||
yolo::info("{} {}", app->Scene, object);
|
|
||||||
scene::scene_add_object(app->Scene, object);
|
scene::scene_add_object(app->Scene, object);
|
||||||
|
|
||||||
|
app->PreviewRenderer = graphics::preview_create();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,79 +142,79 @@ int inferno_run(InfernoApp* app)
|
|||||||
if (!graphics::window_new_frame())
|
if (!graphics::window_new_frame())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// // set the main window to the dockspace and then on the first launch set the preset
|
// set the main window to the dockspace and then on the first launch set the preset
|
||||||
// ImGuiID dockspace_id = ImGui::GetID("main");
|
ImGuiID dockspace_id = ImGui::GetID("main");
|
||||||
// static ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_PassthruCentralNode;
|
static ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_PassthruCentralNode;
|
||||||
// if (ImGui::DockBuilderGetNode(dockspace_id) == NULL) {
|
if (ImGui::DockBuilderGetNode(dockspace_id) == NULL) {
|
||||||
// inferno_preset_gui(app);
|
inferno_preset_gui(app);
|
||||||
// }
|
}
|
||||||
// ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);
|
ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);
|
||||||
//
|
|
||||||
// yolo::debug("{} {} {}", app->Scene->Camera, app->Input, app->Input->MouseDelta.x);
|
|
||||||
// if (glm::length(app->Input->MouseDelta) > 0.0f)
|
|
||||||
// graphics::camera_mouse_move(app->Scene->Camera, app->Input->MouseDelta);
|
|
||||||
// if (app->Input->MovementDelta != 0b00000000)
|
|
||||||
// graphics::camera_move(app->Scene->Camera, app->Input->MovementDelta);
|
|
||||||
|
|
||||||
// // Menu Bar
|
if (glm::length(app->Input->MouseDelta) > 0.0f)
|
||||||
// static bool showPreview = true;
|
graphics::camera_mouse_move(app->Scene->Camera, app->Input->MouseDelta);
|
||||||
// static bool showRenderSettings = true;
|
if (app->Input->MovementDelta != 0b00000000)
|
||||||
// static bool showDemoWindow = false;
|
graphics::camera_move(app->Scene->Camera, app->Input->MovementDelta);
|
||||||
// if (ImGui::BeginMenuBar()) {
|
|
||||||
// if (ImGui::BeginMenu("Menu")) {
|
// Menu Bar
|
||||||
// ImGui::EndMenu();
|
static bool showPreview = true;
|
||||||
// }
|
static bool showRenderSettings = true;
|
||||||
// if (ImGui::BeginMenu("View")) {
|
static bool showDemoWindow = false;
|
||||||
// ImGui::Checkbox("Show Preview", &showPreview);
|
if (ImGui::BeginMenuBar()) {
|
||||||
// ImGui::SameLine();
|
if (ImGui::BeginMenu("Menu")) {
|
||||||
// inferno_gui_help_marker("Show the preview window");
|
ImGui::EndMenu();
|
||||||
// ImGui::Checkbox("Show Settings", &showRenderSettings);
|
}
|
||||||
// ImGui::SameLine();
|
if (ImGui::BeginMenu("View")) {
|
||||||
// inferno_gui_help_marker("Show the Inferno HART settings window");
|
ImGui::Checkbox("Show Preview", &showPreview);
|
||||||
// ImGui::Checkbox("Show Demo", &showDemoWindow);
|
ImGui::SameLine();
|
||||||
//
|
inferno_gui_help_marker("Show the preview window");
|
||||||
// ImGui::EndMenu();
|
ImGui::Checkbox("Show Settings", &showRenderSettings);
|
||||||
// }
|
ImGui::SameLine();
|
||||||
// ImGui::EndMenuBar();
|
inferno_gui_help_marker("Show the Inferno HART settings window");
|
||||||
// }
|
ImGui::Checkbox("Show Demo", &showDemoWindow);
|
||||||
//
|
|
||||||
// if (showPreview && ImGui::Begin("Preview", nullptr, ImGuiWindowFlags_NoScrollbar)) {
|
ImGui::EndMenu();
|
||||||
// if (ImGui::IsWindowHovered()) {
|
}
|
||||||
// inferno_move_input(app);
|
ImGui::EndMenuBar();
|
||||||
// } else {
|
}
|
||||||
// inferno_stop_move_input(app);
|
|
||||||
// }
|
if (showPreview && ImGui::Begin("Preview", nullptr, ImGuiWindowFlags_NoScrollbar)) {
|
||||||
//
|
if (ImGui::IsWindowHovered()) {
|
||||||
// graphics::raster_set_viewport(scene::scene_get_camera(app->Scene), { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y });
|
inferno_move_input(app);
|
||||||
// graphics::preview_draw(app->PreviewRenderer, app->Scene);
|
} else {
|
||||||
//
|
inferno_stop_move_input(app);
|
||||||
// ImTextureID texture = (ImTextureID)graphics::preview_get_rendered_texture(app->PreviewRenderer);
|
}
|
||||||
// ImGui::Image(
|
|
||||||
// texture,
|
graphics::raster_set_viewport(scene::scene_get_camera(app->Scene),
|
||||||
// { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y },
|
{ ImGui::GetWindowSize().x, ImGui::GetWindowSize().y });
|
||||||
// ImVec2(0, 1), ImVec2(1, 0));
|
graphics::preview_draw(app->PreviewRenderer, app->Scene);
|
||||||
//
|
|
||||||
// glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
ImTextureID texture = (ImTextureID)graphics::preview_get_rendered_texture(app->PreviewRenderer);
|
||||||
// ImGui::End();
|
ImGui::Image(
|
||||||
// }
|
texture,
|
||||||
|
{ ImGui::GetWindowSize().x, ImGui::GetWindowSize().y },
|
||||||
|
ImVec2(0, 1), ImVec2(1, 0));
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
// GLenum err;
|
GLenum err;
|
||||||
// while((err = glGetError()) != GL_NO_ERROR) {
|
while((err = glGetError()) != GL_NO_ERROR) {
|
||||||
// std::string error;
|
std::string error;
|
||||||
// switch (err) {
|
switch (err) {
|
||||||
// case GL_INVALID_ENUM: error = "INVALID_ENUM"; break;
|
case GL_INVALID_ENUM: error = "INVALID_ENUM"; break;
|
||||||
// case GL_INVALID_VALUE: error = "INVALID_VALUE"; break;
|
case GL_INVALID_VALUE: error = "INVALID_VALUE"; break;
|
||||||
// case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break;
|
case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break;
|
||||||
// case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break;
|
case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break;
|
||||||
// case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break;
|
case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break;
|
||||||
// case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break;
|
case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break;
|
||||||
// case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break;
|
case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break;
|
||||||
// default: error = std::to_string((uint32_t)err); break;
|
default: error = std::to_string((uint32_t)err); break;
|
||||||
// }
|
}
|
||||||
// yolo::error("[GL]: {} {}", err, error);
|
yolo::error("[GL]: {} {}", err, error);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
graphics::window_render();
|
graphics::window_render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
#include "scene/object.hpp"
|
#include "scene/object.hpp"
|
||||||
#include "shader.hpp"
|
#include "shader.hpp"
|
||||||
|
|
||||||
|
#include <yolo/yolo.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <scene/camera.hpp>
|
#include <scene/camera.hpp>
|
||||||
#include <scene/material.hpp>
|
#include <scene/material.hpp>
|
||||||
@@ -109,12 +111,15 @@ void preview_draw(PreviewRenderer* renderer, scene::Scene* scene)
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
for (scene::SceneObject* o : scene::scene_get_renderables(scene)) {
|
for (scene::SceneObject* o : scene::scene_get_renderables(scene)) {
|
||||||
|
yolo::info("Rendering object: {}", o);
|
||||||
for (scene::Mesh* m : scene::scene_object_get_meshs(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());
|
||||||
|
|
||||||
glBindVertexArray(m->getVAO());
|
glBindVertexArray(m->getVAO());
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->getEBO());
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->getEBO());
|
||||||
|
|
||||||
glDrawElements(GL_TRIANGLES, m->getIndexCount() * sizeof(uint32_t), GL_UNSIGNED_INT, 0);
|
glDrawElements(GL_TRIANGLES, m->getIndexCount() * sizeof(uint32_t), GL_UNSIGNED_INT, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
|
|
||||||
std::ifstream inf;
|
std::ifstream inf;
|
||||||
inf.open(file.c_str(), std::ios_base::in);
|
inf.open(file.c_str(), std::ios_base::in);
|
||||||
if (!inf.is_open())
|
if (!inf.is_open())
|
||||||
{
|
{
|
||||||
yolo::error("Failed to open OBJ file ", file.string());
|
yolo::error("Failed to open OBJ file ", file.string());
|
||||||
return;
|
return;
|
||||||
@@ -82,7 +82,7 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
std::map<FaceVert, int, vert_less> uniqueverts;
|
std::map<FaceVert, int, vert_less> uniqueverts;
|
||||||
unsigned int vert_count = 0;
|
unsigned int vert_count = 0;
|
||||||
|
|
||||||
while (inf.good())
|
while (inf.good())
|
||||||
{
|
{
|
||||||
memset( (void*)line, 0, CHARACTER_COUNT);
|
memset( (void*)line, 0, CHARACTER_COUNT);
|
||||||
inf.getline(line, CHARACTER_COUNT);
|
inf.getline(line, CHARACTER_COUNT);
|
||||||
@@ -94,7 +94,7 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
|
|
||||||
// verts look like:
|
// verts look like:
|
||||||
// v float float float
|
// v float float float
|
||||||
if (strcmp(token, "v") == 0)
|
if (strcmp(token, "v") == 0)
|
||||||
{
|
{
|
||||||
float x=0, y=0, z=0, w=1;
|
float x=0, y=0, z=0, w=1;
|
||||||
sscanf(line+2, "%f %f %f %f", &x, &y, &z, &w);
|
sscanf(line+2, "%f %f %f %f", &x, &y, &z, &w);
|
||||||
@@ -110,7 +110,7 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
}
|
}
|
||||||
// texcoords:
|
// texcoords:
|
||||||
// vt float float
|
// vt float float
|
||||||
else if (strcmp(token, "vt") == 0)
|
else if (strcmp(token, "vt") == 0)
|
||||||
{
|
{
|
||||||
float x=0, y=0, z=0;
|
float x=0, y=0, z=0;
|
||||||
sscanf(line+3, "%f %f %f", &x, &y, &z);
|
sscanf(line+3, "%f %f %f", &x, &y, &z);
|
||||||
@@ -119,14 +119,14 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
|
|
||||||
// keep track of smoothing groups
|
// keep track of smoothing groups
|
||||||
// s [number|off]
|
// s [number|off]
|
||||||
else if (strcmp(token, "s") == 0)
|
else if (strcmp(token, "s") == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// faces start with:
|
// faces start with:
|
||||||
// f
|
// f
|
||||||
else if (strcmp(token, "f") == 0)
|
else if (strcmp(token, "f") == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::vector<int> vindices;
|
std::vector<int> vindices;
|
||||||
@@ -164,7 +164,7 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
|
|
||||||
// being that some exporters can export either 3 or 4 sided polygon's
|
// being that some exporters can export either 3 or 4 sided polygon's
|
||||||
// convert what ever was exported into triangles
|
// convert what ever was exported into triangles
|
||||||
for (size_t i=1; i<vindices.size()-1; ++i)
|
for (size_t i=1; i<vindices.size()-1; ++i)
|
||||||
{
|
{
|
||||||
Face face;
|
Face face;
|
||||||
FaceVert tri;
|
FaceVert tri;
|
||||||
@@ -211,25 +211,26 @@ void ObjLoader::load(std::filesystem::path file)
|
|||||||
mTexCoords.resize(vert_count);
|
mTexCoords.resize(vert_count);
|
||||||
|
|
||||||
std::map<FaceVert, int, vert_less>::iterator iter;
|
std::map<FaceVert, int, vert_less>::iterator iter;
|
||||||
for (iter = uniqueverts.begin(); iter != uniqueverts.end(); ++iter)
|
for (iter = uniqueverts.begin(); iter != uniqueverts.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
|
||||||
mPositions[iter->second] = verts[iter->first.vert];
|
mPositions[iter->second] = verts[iter->first.vert];
|
||||||
|
|
||||||
if ( norms.size() > 0 )
|
if ( norms.size() > 0 )
|
||||||
{
|
{
|
||||||
mNormals[iter->second] = norms[iter->first.norm];
|
mNormals[iter->second] = norms[iter->first.norm];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( texcoords.size() > 0)
|
if ( texcoords.size() > 0)
|
||||||
{
|
{
|
||||||
mTexCoords[iter->second] = texcoords[iter->first.coord];
|
mTexCoords[iter->second] = texcoords[iter->first.coord];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObjLoader::getIndexCount()
|
int ObjLoader::getIndexCount()
|
||||||
{
|
{
|
||||||
|
yolo::debug("Face count: {}", mFaces.size());
|
||||||
return (int)mFaces.size() * 3;
|
return (int)mFaces.size() * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ Scene* scene_create()
|
|||||||
{
|
{
|
||||||
Scene* scene = new Scene;
|
Scene* scene = new Scene;
|
||||||
scene->Objects = std::vector<SceneObject*>();
|
scene->Objects = std::vector<SceneObject*>();
|
||||||
scene->Camera = new graphics::Camera;
|
scene->Camera = graphics::camera_create();
|
||||||
yolo::debug("Created scene {}", scene);
|
yolo::debug("Created scene {} and camera {}", scene, scene->Camera);
|
||||||
return scene;
|
return scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user