Пример #1
0
void Widget::initializeGL()
{
    qDebug() << "isValid:" << this->context()->isValid();
    qDebug() << "isSharing:" << this->context()->isSharing();
    qDebug() << "hasOpenGL:" << this->context()->format().hasOpenGL();
    qDebug() << "Format:" << this->context()->format();


    glEnable(GL_DEPTH_TEST);

    QString vertexShaderSource(
        "uniform mat4 modelViewMatrix;\n"
        "uniform mat4 projectionMatrix;\n"
        "attribute vec4 vertexPosition;\n"
        "\n"
        "void main(void)\n"
        "{\n"
        "    gl_Position = projectionMatrix * modelViewMatrix  * vertexPosition;\n"
        "}\n");

    QString fragmentShaderSource(
        "precision mediump float;\n"
        "\n"
        "void main(void)\n"
        "{\n"
        "gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\n"
        "}\n");

    QGLShader *vertexShader = new QGLShader(QGLShader::Vertex, this);
    QGLShader *fragmentShader = new QGLShader(QGLShader::Fragment, this);
    qDebug() << "After constuctor Shaders.";
    qDebug() << vertexShader->log();

    vertexShader->compileSourceCode(vertexShaderSource);
    fragmentShader->compileSourceCode(fragmentShaderSource);
    
    _shaderProgram = new QGLShaderProgram(this);

    _shaderProgram->addShader(vertexShader);
    _shaderProgram->addShader(fragmentShader);

    _shaderProgram->link();
    
    _shaderProgram->bind();

    qglClearColor(Qt::gray);
    _timer->start(10);
    qDebug() << vertexShader->log();
}
Пример #2
0
int main( int argc, char* argv[] )
{
	if( SDL_Init( SDL_INIT_VIDEO ) != 0 )
  {
    std::cerr << "SDL Error: " << SDL_GetError() << '\n';
    return 0;
  }
	atexit( SDL_Quit );

	SDL_Surface* surface = SDL_SetVideoMode( 800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_OPENGL );
  if( surface == nullptr )
  {
    std::cerr << "SDL Error: " << SDL_GetError() << '\n';
    exit( 1 );
  }

	SDL_WM_SetCaption( "OpenGL", nullptr );

  glewExperimental = GL_TRUE;
  GLenum glewInitError( glewInit() );
  if( glewInitError != GLEW_OK )
  {
    std::cerr << "SDL Error: " << glewGetErrorString( glewInitError ) << '\n';
    exit( 2 );
  }

  GLuint vertexBuffer;
  glGenBuffers( 1, &vertexBuffer );


  // shader code
  GLuint vertexShaderHandle( glCreateShader( GL_VERTEX_SHADER ) );
  std::ifstream vertexShaderSource( "Identity.vs" );

  GLuint fragmentShaderHandle( glCreateShader( GL_FRAGMENT_SHADER ) );
  std::ifstream fragmentShaderSource( "Identity.fs" );

  glCompileShader( vertexShaderHandle );
  glCompileShader( fragmentShaderHandle );

  GLuint shaderProgramHandle( glCreateProgram() );
  glAttachShader( shaderProgramHandle, vertexShaderHandle );
  glAttachShader( shaderProgramHandle, fragmentShaderHandle );

  glBindAttribLocation( vertexShaderHandle, 0, "vertex" );
  glBindAttribLocation( vertexShaderHandle, 1, "color" );

  glLinkProgram( shaderProgramHandle );

  glDeleteShader( vertexShaderHandle );
  glDeleteShader( fragmentShaderHandle );
  
  glUseProgram( shaderProgramHandle );

  glClearColor( 0.0f, 0.0f, 1.0f, 1.0f );

  SDL_Event windowEvent;
  while( true )
  {
  	if( SDL_PollEvent( &windowEvent ) )
    {
    	if( windowEvent.type == SDL_QUIT ) break;
      if( windowEvent.type == SDL_KEYDOWN )
      {
        std::cout << "key " << static_cast< char >( windowEvent.key.keysym.sym ) << " is down\n";
      }
    }

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );

    // draw a triangle
    glBegin( GL_TRIANGLES );
      glVertex3f( -0.5f, 0.0f, 0.0f );
      glColor4f( 1.0f, 0.0f, 0.0f, 1.0f );
      glVertex3f(  0.5f, 0.0f, 0.0f );
      glColor4f( 0.0f, 1.0f, 0.0f, 1.0f );
      glVertex3f(  0.0f, 0.5f, 0.0f );
      glColor4f( 0.0f, 0.0f, 1.0f, 1.0f );
    glEnd();

    SDL_GL_SwapBuffers();

    std::cout << std::flush;
  }

  glDeleteProgram( shaderProgramHandle );

}