- AudioGoose45
- Posts: 1
- Joined:
GLFW and Noesis Integration; no display in GLFW window
So I've been playing around with Noesis on a side project that I've working on for quite a while now. I've been able to put together my game engine that is written in C++ and with GLFW and GLAD. The engine by itself works thus far without issue. So I began to integrate Noesis into the project following the Integration Sample for GLUT, replacing the GLUT calls with the related GLFW calls.
Right now what is happening is the application starts, but I'm presented only with a blue screen and not the Noesis display. So, my assumption is that I'm missing a step somewhere. The question that I have it what am I missing?
Below I have some of the functions calls supplied that involve rendering and houses all of the Noesis calls.
Right now what is happening is the application starts, but I'm presented only with a blue screen and not the Noesis display. So, my assumption is that I'm missing a step somewhere. The question that I have it what am I missing?
Below I have some of the functions calls supplied that involve rendering and houses all of the Noesis calls.
Code: Select all
void Mongoose::Engine::RenderTask::Run () {
//If the renderer is not initialized, then we need to initialize it.
if (!Initalized) {
InitializeRenderer ();
Initalized = true;
}
if (!glfwWindowShouldClose (window)) {
if (glfwGetKey (window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose (window, true);
// Update view (layout, animations, ...)
_view->Update (glfwGetTimerValue () / 1000.0);
// Offscreen rendering phase populates textures needed by the on-screen rendering
_view->GetRenderer ()->UpdateRenderTree ();
_view->GetRenderer ()->RenderOffscreen ();
glBindFramebuffer (GL_FRAMEBUFFER, 0);
int width, height;
glfwGetFramebufferSize (window, &width, &height);
glViewport (0, 0, width, height);
glClearColor (0.0f, 0.0f, 0.25f, 0.0f);
glClearStencil (0);
glClear (GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Rendering is done in the active framebuffer
_view->GetRenderer ()->Render ();
/* Swap front and back buffers */
glfwSwapBuffers (window);
/* Poll for and process events */
glfwPollEvents ();
}
else {
TerminateRenderer ();
}
}
bool Mongoose::Engine::RenderTask::InitializeRenderer () {
//Initialize GLFW
if (!glfwInit ()) {
return false;
}
else {
int width = Configuration->GetResolutionX ();
int height = Configuration->GetResolutionY ();
//Set the GLFW version features.
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//Create a GLFW window.
if (Configuration->GetFullScreen ()) {
window = glfwCreateWindow (width, height, "LearnOpenGL", glfwGetPrimaryMonitor (), NULL);
}
else {
window = glfwCreateWindow (width, height, "LearnOpenGL", NULL, NULL);
}
if (window == NULL) {
LogFile->LogError ("Failed to create GLFW window");
TerminateRenderer ();
return false;
}
//Make the new window the current context.
glfwMakeContextCurrent (window);
gladLoadGL ();
glfwSwapInterval (1);
//Set the viewpoint
//glViewport (0, 0, width, height);
InitializeNoesis ();
return true;
}
}
void Mongoose::Engine::RenderTask::InitializeNoesis () {
auto logHandler = [](const char*, uint32_t, uint32_t level, const char*, const char* message) {
// [TRACE] [DEBUG] [INFO] [WARNING] [ERROR]
const char* prefixes[] = { "T", "D", "I", "W", "E" };
printf ("[NOESIS/%s] %s\n", prefixes[level], message);
};
Noesis::GUI::Init (nullptr, logHandler, nullptr);
// For simplicity purposes we are not using resource providers in this sample. ParseXaml() is
// enough if there is no extra XAML dependencies
Noesis::Ptr<Noesis::Grid> xaml (Noesis::GUI::ParseXaml<Noesis::Grid> (R"(
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="#FF123F61"/>
<GradientStop Offset="0.6" Color="#FF0E4B79"/>
<GradientStop Offset="0.7" Color="#FF106097"/>
</LinearGradientBrush>
</Grid.Background>
<Viewbox>
<StackPanel Margin="50">
<Button Content="Hello World!" Margin="0,30,0,0"/>
<Rectangle Height="5" Margin="-10,20,-10,0">
<Rectangle.Fill>
<RadialGradientBrush>
<GradientStop Offset="0" Color="#40000000"/>
<GradientStop Offset="1" Color="#00000000"/>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
</StackPanel>
</Viewbox>
</Grid>
)"));
// View creation to render and interact with the user interface
// We transfer the ownership to a global pointer instead of a Ptr<> because there is no way
// in GLUT to do shutdown and we don't want the Ptr<> to be released at global time
_view = Noesis::GUI::CreateView (xaml).GiveOwnership ();
_view->SetIsPPAAEnabled (true);
//Get the device from Noesis
Noesis::Ptr<Noesis::RenderDevice> device = NoesisApp::GLFactory::CreateDevice ();
// Renderer initialization with an OpenGL device
_view->GetRenderer ()->Init (device);
}
-
sfernandez
Site Admin
- Posts: 3154
- Joined:
Re: GLFW and Noesis Integration; no display in GLFW window
Hello, I think you are missing the resize code:
Without that the View has a default size of 0,0 and nothing would be rendered.
Code: Select all
static void ReshapeFunc(int width, int height)
{
_view->SetSize(width, height);
}
Who is online
Users browsing this forum: Bing [Bot] and 1 guest