Made demo use ShaderBuilder

Former-commit-id: 8b915f244c95ff7d0d20a980feed6998c7f2e441
This commit is contained in:
Lynix 2012-12-25 12:33:42 +01:00
parent a366d4966b
commit d6ef4e3547
3 changed files with 3 additions and 67 deletions

View File

@ -2,6 +2,7 @@
#include <Nazara/Core/Clock.hpp>
#include <Nazara/Math.hpp>
#include <Nazara/Renderer.hpp>
#include <Nazara/Renderer/ShaderBuilder.hpp>
#include <Nazara/Renderer/TextureSampler.hpp>
#include <Nazara/Utility.hpp>
#include <iostream>
@ -19,9 +20,6 @@ int main()
std::cout << "Left click to capture/free the mouse" << std::endl;
std::cout << "Right click to control Dr. Freak" << std::endl;
// Cette ligne active le mode de compatibilité d'OpenGL lors de l'initialisation de Nazara (Nécessaire pour le shader)
NzContextParameters::defaultCompatibilityProfile = true;
// Maintenant nous initialisons le Renderer (Qui initialisera le noyau ainsi que le module utilitaire)
// Cette étape est obligatoire pour beaucoup de fonctionnalités (Notamment le chargement de ressources et le rendu)
NzInitializer<Nz3D> nazara;
@ -86,45 +84,7 @@ int main()
// Il existe plusieurs langages de shaders, GLSL pour OpenGL, HLSL pour Direct3D et Cg qui peut être utilisé pour les deux.
// Le Renderer de Nazara utilise OpenGL, par conséquent nous utiliserons le GLSL
// La méthode NzShader::IsLanguageSupported permet de savoir si un langage est supporté.
NzShader shader;
if (!shader.Create(nzShaderLanguage_GLSL))
{
std::cout << "Failed to load shader" << std::endl;
std::getchar();
return EXIT_FAILURE;
}
// Une fois le shader créé, nous devons lui spécifier les codes sources de nos shaders
// Pour notre exemple nous prendrons un shader très simple
// Un shader doit obligatoirement posséder au moins deux codes, un pour le fragment shader et un pour le vertex shader
// Le fragment shader traite la couleur de nos pixels
if (!shader.LoadFromFile(nzShaderType_Fragment, "shaders/basic.frag"))
{
std::cout << "Failed to load fragment shader from file" << std::endl;
// À la différence des autres ressources, le shader possède un log qui peut indiquer les erreurs en cas d'échec
std::cout << "Log: " << shader.GetLog() << std::endl;
std::getchar();
return EXIT_FAILURE;
}
// Le vertex shader (Transformation des vertices de l'espace 3D vers l'espace écran)
if (!shader.LoadFromFile(nzShaderType_Vertex, "shaders/basic.vert"))
{
std::cout << "Failed to load vertex shader from file" << std::endl;
std::cout << "Log: " << shader.GetLog() << std::endl;
std::getchar();
return EXIT_FAILURE;
}
// Une fois les codes sources de notre shader chargé, nous pouvons le compiler, afin de le rendre utilisable
if (!shader.Compile())
{
std::cout << "Failed to compile shader" << std::endl;
std::cout << "Log: " << shader.GetLog() << std::endl;
std::getchar();
return EXIT_FAILURE;
}
const NzShader* shader = NzShaderBuilder::Get(nzShaderBuilder_DiffuseMapping);
// Nos ressources sont chargées, et c'est bien beau, mais il nous faudrait une fenêtre pour afficher tout ça
// Window représente une fenêtre singulière, pour y effectuer un rendu il nous faut une RenderWindow
@ -487,7 +447,7 @@ int main()
drfreak.SetTranslation(translation);
// On active le shader et paramètrons le rendu
NzRenderer::SetShader(&shader);
NzRenderer::SetShader(shader);
// Notre scène 3D requiert un test de profondeur
NzRenderer::Enable(nzRendererParameter_DepthTest, true);

View File

@ -1,10 +0,0 @@
#version 110
varying vec2 vTexCoord;
uniform sampler2D DiffuseMap;
void main()
{
gl_FragColor = texture2D(DiffuseMap, vTexCoord);
}

View File

@ -1,14 +0,0 @@
#version 110
attribute vec3 Position;
attribute vec2 TexCoord0;
uniform mat4 WorldViewProjMatrix;
varying vec2 vTexCoord;
void main()
{
gl_Position = WorldViewProjMatrix * vec4(Position, 1.0);
vTexCoord = TexCoord0;
}