Exemplo n.º 1
0
int main(int argc, char** argv)
{
	Display display(800, 600, "Test");
	Shader shader("./shaders/basicshader");
	Shader shader2("./shaders/basicshader");
	Vertex vertices[] = { Vertex(glm::vec3(-0.5, -0.5, 0), glm::vec2(0.0, 0.0)),
						Vertex(glm::vec3(0, 0.5, 0) , glm::vec2(0.5, 1.0)),
						Vertex(glm::vec3(0.5, -0.5, 0), glm::vec2(1.0, 0.0)) };
	unsigned int indices[] = { 0, 1, 2 };

	Texture texture("images/test.png");
	Transform transform;
	Transform origin;
	origin.SetPos(glm::vec3(0, 5, 0));

	float counter = 0.0f;
	Camera camera(glm::vec3(0, 0, -30), 70.0f, (float)WIDTH/HEIGHT , 0.01f, 1000.0f);



	//Mesh mesh(vertices, sizeof(vertices)/sizeof(vertices[0]), indices, sizeof(indices)/sizeof(indices[0]));
	Mesh mesh2("./images/mountainsuv.obj");
	//Mesh mesh3("./images/monkey3.obj");

	//Console stuff:
	std::cout << "   Controls:" << '\n' <<'\n'<< "   W A S D = sus stanga jos dreapta"
			  << '\n' << "  z = zoom in"
			  << '\n' << "  x = zoom out"
			  << '\n' << "  UP ARROW  = rotatie verticala sus"
			  << '\n' << "  DOWN ARROW  = rotatie verticala jos"
			  << '\n' << "  LEFT ARROW  = rotatie orizontala stanga"
			  << '\n' << "  RIGHT ARROW  = rotatie verticala dreapta";

	
	while (!display.IsClosed())
	{
		display.Clear(0.0f, 0.5f, 0.3f, 0.0f);

		shader.Bind();
		texture.Bind();

		
		mesh2.Draw();



		//mesh.Draw()
		shader.Update(transform, origin, camera);
		display.Update(transform);
		counter += 0.001f;

	}

	return 0;
}
Exemplo n.º 2
0
void ShaderGLTest::compile() {
    #ifndef MAGNUM_TARGET_GLES
    constexpr Version v = Version::GL210;
    #else
    constexpr Version v = Version::GLES200;
    #endif

    Shader shader(v, Shader::Type::Fragment);
    shader.addSource("void main() {}\n");
    CORRADE_VERIFY(shader.compile());

    Shader shader2(v, Shader::Type::Fragment);
    shader2.addSource("[fu] bleh error #:! stuff\n");
    CORRADE_VERIFY(!shader2.compile());
}
ImmeubleAvecFenetre::ImmeubleAvecFenetre(int nombreEtages) {
	mImmeuble=new osg::Group();
	mImmeubleLow=new osg::Group();
	mEmptyNode=new osg::Group();
	mRoute= new osg::Group();
	mNombreEtages=nombreEtages;
	osg::ref_ptr<osg::StateSet> etageStateSet (etage->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> rdcStateSet (rezDeChausse->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> toitStateSet (toit->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> trotoirStateSet (trotoir->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> routeStateSet (route->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> etageLowStateSet (etageLow->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> rdcLowStateSet (rezDeChausseLow->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> toitLowStateSet (toitLow->getOrCreateStateSet());
	osg::ref_ptr<osg::StateSet> lampadaireStateSet (lampadaire->getOrCreateStateSet());

	//Its shader objects
	osg::ref_ptr<osg::Program> shader (new osg::Program);
	osg::ref_ptr<osg::Shader> capsulevertexShader(
	osg::Shader::readShaderFile (osg::Shader::VERTEX, "../shaders/nuanceurSommets.glsl"));

	osg::ref_ptr<osg::Shader> capsulefragShader(
			osg::Shader::readShaderFile (osg::Shader::FRAGMENT, "../shaders/nuanceurFragments.glsl"));

	shader->addShader(capsulevertexShader.get());
	shader->addShader(capsulefragShader.get());
	osg::ref_ptr<osg::Program> shader2 (new osg::Program);
	osg::ref_ptr<osg::Shader> texturevertexShader(
			osg::Shader::readShaderFile (osg::Shader::VERTEX, "../shaders/nuanceurSommetsTexture.glsl"));

	osg::ref_ptr<osg::Shader> texturefragShader(
			osg::Shader::readShaderFile (osg::Shader::FRAGMENT, "../shaders/nuanceurFragmentsTexture.glsl"));
	//Binding the box shaders to its program
	shader2->addShader(texturevertexShader.get());
	shader2->addShader(texturefragShader.get());

	etageStateSet->setAttribute(shader);
	rdcStateSet->setAttribute(shader);
	toitStateSet->setAttribute(shader);
	trotoirStateSet->setAttribute(shader);
	lampadaireStateSet->setAttribute(shader);
	etageLowStateSet->setAttribute(shader2);
	rdcLowStateSet->setAttribute(shader2);
	toitLowStateSet->setAttribute(shader2);
	routeStateSet->setAttribute(shader2);

}
Exemplo n.º 4
0
    void canDetachAllShaders()
    {
        ShaderProgram shaderProgram;
        Shader shader1(Shader::VERTEX_SHADER);
        Shader shader2(Shader::FRAGMENT_SHADER);

        QVERIFY(shaderProgram.attach(shader1));
        QVERIFY(shaderProgram.attach(shader2));

        QVERIFY(shaderProgram.has(shader1));
        QVERIFY(shaderProgram.has(shader2));

        shaderProgram.detachAllShaders();

        QVERIFY(!shaderProgram.has(shader1));
        QVERIFY(!shaderProgram.has(shader2));
    }
Exemplo n.º 5
0
//--------------------------------------------------------------------------
void GLShadersTests::tests()
{
  GLVertexShader shader1("vert");
  CPPUNIT_ASSERT(shader1.name() == "vert");
  CPPUNIT_ASSERT(GL_VERTEX_SHADER == shader1.target());

  GLFragmentShader shader2("frag");
  CPPUNIT_ASSERT(shader2.name() == "frag");
  CPPUNIT_ASSERT(GL_FRAGMENT_SHADER == shader2.target());

  GLGeometryShader shader3;
  CPPUNIT_ASSERT(shader3.name() == "");
  CPPUNIT_ASSERT(GL_GEOMETRY_SHADER == shader3.target());

  //--- Check initial state
  CPPUNIT_ASSERT(shader1.m_shader_code == "");
  CPPUNIT_ASSERT(shader1.m_error_msg == "");
  CPPUNIT_ASSERT(!shader1.m_compiled);
  CPPUNIT_ASSERT(0 == shader1.m_attached);

  //--- Check initial state
  CPPUNIT_ASSERT(shader2.code() == "");
  CPPUNIT_ASSERT(shader2.error() == "");
  CPPUNIT_ASSERT(!shader2.hasErrored());
  CPPUNIT_ASSERT(!shader2.compiled());
  CPPUNIT_ASSERT(0 == shader2.m_attached);

  //--- Load from string
  shader1.fromString("foobar");
  CPPUNIT_ASSERT(!shader1.hasErrored());
  CPPUNIT_ASSERT(shader1.code() == "foobar");
  CPPUNIT_ASSERT(shader1.loaded());
  CPPUNIT_ASSERT(!shader1.compiled());
  try {
    shader1.throw_if_not_loaded();
  } catch(...) { CPPUNIT_FAIL("Exception should have not occured"); }

  try {
    shader1.throw_if_already_compiled();
    CPPUNIT_FAIL("Exception should have occured");
  } catch(...) { }

  shader1.fromString("");
  CPPUNIT_ASSERT(!shader1.hasErrored());
  CPPUNIT_ASSERT(shader1.code() == "");
  CPPUNIT_ASSERT(!shader1.loaded());
  CPPUNIT_ASSERT(!shader1.compiled());

  //--- Load from wrong file
  CPPUNIT_ASSERT(shader3.code() == "");
  CPPUNIT_ASSERT(!shader3.fromFile("this_file_does_not_exist"));
  CPPUNIT_ASSERT(!shader3.compiled());
  CPPUNIT_ASSERT(shader3.hasErrored());
  CPPUNIT_ASSERT(shader3.code() == "");
  CPPUNIT_ASSERT(!shader3.compiled());
  CPPUNIT_ASSERT(shader3.error() != "");
  CPPUNIT_ASSERT(!shader3.hasErrored());
  try {
    shader3.throw_if_not_loaded();
    CPPUNIT_FAIL("Exception should have occured");
  } catch(...) {  }
  try {
    shader3.throw_if_already_compiled();
  } catch(...) { CPPUNIT_FAIL("Exception should have not occured"); }
  shader3.m_need_setup = false;
  try {
    shader3.throw_if_already_compiled();
    CPPUNIT_FAIL("Exception should have occured");
  } catch(...) { }

  //---
  shader2.attachProg(0);
  CPPUNIT_ASSERT_EQUAL(0u, shader2.attached());
  shader2.attachProg(42);
  CPPUNIT_ASSERT_EQUAL(42u, shader2.attached());

  //--- Try setup
  shader1.m_error_msg = "";
  shader1.fromString(""); shader1.m_compiled = true;
  shader1.setup();
  CPPUNIT_ASSERT(shader1.hasErrored());
  CPPUNIT_ASSERT(shader1.error() != "");
  shader1.setup();

  //--- Try setup
  shader1.m_error_msg = "";
  shader1.fromString("ff"); shader1.m_compiled = true;
  shader1.setup();
  CPPUNIT_ASSERT(shader1.hasErrored());
  CPPUNIT_ASSERT(shader1.error() != "");
  shader1.setup();


  // TODO shader1.begin();
}
Exemplo n.º 6
0
int main(int argc, char** argv){
  // Set interactive mode for debugging the program when started with arguments
  bool interactive = false;
  if(argc > 1) interactive = true;

  // Initialize GLFW
  if (!glfwInit()) fatalError("GLFW could not be initialized");
  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

  // Create window
  GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, NAME, NULL, NULL);
  if (window == NULL) fatalError("Failed to create GLFW window");
  glfwMakeContextCurrent(window);

  // Controls
  glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
  glfwSetKeyCallback(window, keycallback);

  // Start GLEW
  glewExperimental = GL_TRUE;
  if (glewInit() != GLEW_OK) fatalError("Failed to initialize GLEW");
  glViewport(0, 0, WIDTH, HEIGHT);

  // Load shaders
  Shader shader1("shaders/basic.vertex", "shaders/basic.frag");
  shader1.use();
  glUniform1f(glGetUniformLocation(shader1.program, "first"), FIRST);
  glUniform1f(glGetUniformLocation(shader1.program, "second"), SECOND);
  glUniform1f(glGetUniformLocation(shader1.program, "third"), THIRD);

  Shader shader2("shaders/basic.vertex", "shaders/advanced.frag");

  // Raster scene settings
  Camera camera(glm::vec3(0.0f, 0.0f, 3.0f), -90.0f, 0.0f);
  GLfloat vertices[] = {
    -1.0f, -1.0f, 0.0f, -1.0f, -1.0f,
     1.0f, -1.0f, 0.0f,  1.0f, -1.0f,
    -1.0f,  1.0f, 0.0f, -1.0f,  1.0f,
     1.0f,  1.0f, 0.0f,  1.0f,  1.0f
  };
  GLuint indices[] = {
    0, 1, 2,
    2, 1, 3
  };

  GLuint VAO, VBO, EBO;
  glGenVertexArrays(1, &VAO);
  glBindVertexArray(VAO);

  glGenBuffers(1, &VBO);
  glBindBuffer(GL_ARRAY_BUFFER, VBO);
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
  glEnableVertexAttribArray(0);
  glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*) (3* sizeof(GLfloat)));
  glEnableVertexAttribArray(1);

  glGenBuffers(1, &EBO);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

  glBindVertexArray(0);

  // FPS counter
  bool isTicking = true;
  int fpscount = 0;
  GLfloat fpstime = 0.0f;

  // Frame timings
  GLfloat timeFromStart = START;
  GLfloat lastFrame = (GLfloat) glfwGetTime();
  GLfloat thisFrame = (GLfloat) glfwGetTime();
  GLfloat deltaTime = thisFrame - lastFrame;

  Shader shader = shader1;
  int shaderNum = 1;

  while(!glfwWindowShouldClose(window)){
    thisFrame = (GLfloat) glfwGetTime();
    deltaTime = thisFrame - lastFrame;
    if(isTicking){
      timeFromStart += deltaTime;
      fpscount++;
      fpstime += deltaTime;
      if(fpstime > 1.0f) {
        if(FPSlog){
          std::cout << "FPS: " << (GLfloat) fpscount /  fpstime << std::endl;
        }
        fpstime = 0.0f;
        fpscount = 0;
      }
    }

    // Handle Inputs if we are in interactive mode
    //if (interactive) {
    glfwPollEvents();
    handleKeys(window, timeFromStart, isTicking, shader);
    //}


    glClearColor(0.05f, 0.05f, 0.05f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glm::mat4 model;
    model = glm::scale(model, glm::vec3(SCALE, SCALE, SCALE));
    glm::mat4 view;
    view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));
    glm::mat4 proj = glm::perspective(glm::radians(45.0f), (GLfloat) WIDTH / (GLfloat) HEIGHT, 0.1f, 100.0f);
    glm::mat4 trans = proj * view * model;

    if(timeFromStart > 40.0f && shaderNum == 1) {
      shader = shader2;
      shaderNum++;
    }

    shader.use();

    glUniform1f(glGetUniformLocation(shader.program, "time"), timeFromStart);
    glUniformMatrix4fv(glGetUniformLocation(shader.program, "transform"), 1, GL_FALSE, glm::value_ptr(trans));
    glBindVertexArray(VAO);
    // Draw
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

    glBindVertexArray(0);
    glfwSwapBuffers(window);
    lastFrame = thisFrame;
  }
  glfwTerminate();
  return 0;
}