/****************************************************************\
 *  Main client painting routine
 *--------------------------------------------------------------
 *
 *  Name:   MainPaint(hwnd)
 *
 *  Purpose: Paints the main client window.
 *
 *  Usage:  Routine is called whenver the client window
 *          procedure receives a WM_PAINT message
 *
 *  Method:
 *          - begins painting by calling WinBeginPaint
 *              and retrieving the HPS for the window
 *          - performs any painting desired
 *          - ends painting by calling WinEndPaint
 *
 *  Returns:
 *
\****************************************************************/
VOID MainPaint(HWND hwnd,                                 /* handle to window */
               CHAR PipeMsgs[MAX_MESSAGES][MESSAGE_LEN],  /* array of messages */
               unsigned int uiIndex,                      /* beginning of circular array */
               SHORT sTotalMsgs)                          /* total number of messages */
{
   RECTL         rclInvalid;
   HPS           hps;
   LONG          sPaintBeg, sPaintEnd, sLine;
   POINTL        ptl;
   unsigned int  uiOffset;

   uiOffset = (sTotalMsgs < MAX_MESSAGES) ? 0 : uiIndex;

   hps = WinBeginPaint(hwnd, NULLHANDLE, (PRECTL)&rclInvalid);
   GpiErase(hps);

   sPaintBeg = max(0, sVscrollPos + (cyClient - rclInvalid.yTop) / cyChar);
   sPaintEnd = min(sTotalMsgs, sVscrollPos + (cyClient - rclInvalid.yBottom) / cyChar + 1);

   for (sLine = sPaintBeg ; sLine < sPaintEnd ; sLine++)
   {
      ptl.x = cxCaps - sHscrollPos ;
      ptl.y = cyClient - cyChar * (BUFF_OFFSET(uiOffset,sLine) + 1 - sVscrollPos) + cyDesc ;

      GpiCharStringAt (hps, &ptl,
                       (LONG) strlen (PipeMsgs[BUFF_OFFSET(uiOffset,sLine)]),
                       PipeMsgs[BUFF_OFFSET(uiOffset,sLine)]) ;
   }

   WinEndPaint (hps) ;
}   /* MainPaint() */
Ejemplo n.º 2
0
void GCube::Draw()
{
    if(_is_inited)
    {
        glUseProgram(_program);
        {
            glUniform1f(_scaleUniformLocal,_scale);
            glUniform4fv(_colorUniformLocal,1,glm::value_ptr(_color));
            glUniform3fv(_moveUniformLocal,1,glm::value_ptr(_translate));
            GCamera* camera = nullptr;
            if(_camera_getter)
            {
                camera = _camera_getter();
            }
            if(camera)
            {
                if(_viewMatrixUniformLocal!=-1)
                {
                    glm::mat4x4 view_matrix;
                    camera->GetViewMatrix(view_matrix);
                    glUniformMatrix4fv(_viewMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(view_matrix));
                }
                if(_projectionMatrixUniformLocal!=-1)
                {
                    glm::mat4x4 projection_matrix;
                    camera->GetCurProjectionMatrix(projection_matrix);
                    glUniformMatrix4fv(_projectionMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(projection_matrix));
                }
            }
            else
            {
                if(_view_matrix_getter && _viewMatrixUniformLocal!=-1)
                {
                    glm::mat4x4 view_matrix;
                    _view_matrix_getter(view_matrix);
                    glUniformMatrix4fv(_viewMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(view_matrix));
                }
                if(_projection_matrix_getter && _projectionMatrixUniformLocal!=-1)
                {
                    glm::mat4x4 projection_matrix;
                    _projection_matrix_getter(projection_matrix);
                    glUniformMatrix4fv(_projectionMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(projection_matrix));
                }
            }

            glBindVertexArray(_vertex_arr_obj);
            //glDrawElements(GL_TRIANGLES,16,GL_UNSIGNED_INT,BUFF_OFFSET(0));
            glDrawElements(GL_TRIANGLE_STRIP,8,GL_UNSIGNED_INT,BUFF_OFFSET(0));
            glDrawElements(GL_TRIANGLE_STRIP,8,GL_UNSIGNED_INT,BUFF_OFFSET(9*sizeof(GLuint)));
            glBindVertexArray(0);
        }
        glUseProgram(0);
    }
}
Ejemplo n.º 3
0
void GSkybox::Draw()
{
    if(_is_inited)
    {
        if(_camera_pos_getter)
        {
            SetTranslate(_camera_pos_getter());
        }

        GLint OldCullFaceMode;
        glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
        GLint OldDepthFuncMode;
        glGetIntegerv(GL_DEPTH_FUNC, &OldDepthFuncMode);

        glCullFace(GL_FRONT);
        glDepthFunc(GL_LEQUAL);

        glUseProgram(_program);
        {
            _cube_tex_obj.Bind(GL_TEXTURE0);

            glUniform1f(_scaleUniformLocal,_scale);
            glUniform4fv(_colorUniformLocal,1,glm::value_ptr(_color));
            glUniform3fv(_moveUniformLocal,1,glm::value_ptr(_translate));
            if(_view_matrix_getter && _viewMatrixUniformLocal!=-1)
            {
                glm::mat4x4 view_matrix;
                _view_matrix_getter(view_matrix);
                glUniformMatrix4fv(_viewMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(view_matrix));
            }
            if(_projection_matrix_getter && _projectionMatrixUniformLocal!=-1)
            {
                glm::mat4x4 projection_matrix;
                _projection_matrix_getter(projection_matrix);
                glUniformMatrix4fv(_projectionMatrixUniformLocal,1,GL_FALSE,glm::value_ptr(projection_matrix));
            }

            glBindVertexArray(_vertex_arr_obj);
            //glDrawElements(GL_TRIANGLES,16,GL_UNSIGNED_INT,BUFF_OFFSET(0));
            glDrawElements(GL_TRIANGLE_STRIP,8,GL_UNSIGNED_INT,BUFF_OFFSET(0));
            glDrawElements(GL_TRIANGLE_STRIP,8,GL_UNSIGNED_INT,BUFF_OFFSET(9*sizeof(GLuint)));
            glBindVertexArray(0);
        }
        glUseProgram(0);

        glCullFace(OldCullFaceMode);
        glDepthFunc(OldDepthFuncMode);
    }
}
Ejemplo n.º 4
0
static int ReadChar( FILE *f )
/*****************************/
/* read a char from the buffer */
{
    int         ch;
    long        high;

    if( f == stdin ) {
        return fgetc( f );
    }
    if( BufferPos == FileSize ) return EOF;
    high = BUFF_HIGH( BufferPos );
    if( high != FilePos ) {
        if( high != FilePos + 1 ) {
            fseek( f, BUFF_START( BufferPos ), SEEK_SET );
        }
        fread( workBuff, 1, BUFF_SIZE, f );
        FilePos = high;
    }
    ch = workBuff[BUFF_OFFSET(BufferPos)];
    BufferPos++;
    return ch;
}
Ejemplo n.º 5
0
void GSkybox::Init(const char *pos_x, const char *neg_x, const char *pos_y, const char *neg_y, const char *pos_z, const char *neg_z, QImage::Format img_format)
{
    _is_inited = true;
    //QImage::Format::Format_RGB888
    _cube_tex_obj.Load(pos_x,neg_x,pos_y,neg_y,pos_z,neg_z,img_format);

    const char vs[] =
            "#version 410\n"
            "layout (location = 0) in vec3 vi_position;\n"
            "layout (location = 1) in vec3 vi_color;\n"
            "uniform vec3   move;\n"
            "uniform float  scale;\n"
            "uniform vec4   color;\n"
            "uniform mat4x4 view_matrix;\n"
            "uniform mat4x4 projection_matrix;\n"
            "out vec3 vo_tex_pos;\n"
            "out vec4 vo_color;\n"
            "void main(void)\n"
            "{\n"
            "    mat4 scale_mat = mat4(scale);"
            "    scale_mat[3].w = 1.0f;"
            "    //gl_Position = scale_mat*vec4(vi_position+move,1.0);\n"
            "    //gl_Position = view_matrix*scale_mat*vec4(vi_position+move,1.0);\n"
            "    //gl_Position = projection_matrix*scale_mat*vec4(vi_position+move,1.0);\n"
            "    gl_Position = projection_matrix*view_matrix*scale_mat*vec4(vi_position+move,1.0);\n"
            "    gl_Position = gl_Position.xyww;\n"
            "    //vo_color = color;\n"
            "    vo_color = vec4(vi_color,1.0);\n"
            "    vo_tex_pos = vi_position;\n"
            "}\n";
    const char fs[] =
            "#version 410\n"
            "in vec3 vo_tex_pos;\n"
            "in vec4 vo_color;\n"
            "out vec4 fo_color;\n"
            "uniform samplerCube cube_tex;\n"
            "void main(void)\n"
            "{\n"
            "    //fo_color = vo_color;\n"
            "    fo_color = texture(cube_tex,vo_tex_pos);\n"
            "}\n";
    _program = GLHelper::CreateShaderProgram(vs,fs);
    glUseProgram(_program);
    {
        glGenVertexArrays(1,&_vertex_arr_obj);
        glBindVertexArray(_vertex_arr_obj);

        GLfloat* vertex_data = NULL;
        GLint    vertex_data_size;
        GLfloat* vertex_color_data = NULL;
        GLint    vertex_color_data_size;
        GLuint*  vertex_index_data = NULL;
        GLint    vertex_index_data_size;
        GLint    vertex_pos_comp_count;
        GLint    vertex_color_comp_count;

        GetVertexData(vertex_data,vertex_index_data,vertex_color_data,
                      vertex_data_size,vertex_index_data_size,vertex_color_data_size,
                      vertex_pos_comp_count,vertex_color_comp_count);

        glGenBuffers(1,&_vertex_buffer);
        glBindBuffer(GL_ARRAY_BUFFER,_vertex_buffer);
        glBufferData(GL_ARRAY_BUFFER,vertex_data_size+vertex_color_data_size,NULL,GL_STATIC_DRAW);
        glBufferSubData(GL_ARRAY_BUFFER,0,vertex_data_size,vertex_data);
        glBufferSubData(GL_ARRAY_BUFFER,vertex_data_size,vertex_color_data_size,vertex_color_data);

        glGenBuffers(1,&_vertex_index_buffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_vertex_index_buffer);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,vertex_index_data_size,vertex_index_data,GL_STATIC_DRAW);

        _scaleUniformLocal = GLHelper::GetUniformLocal(_program,"scale");
        _colorUniformLocal = GLHelper::GetUniformLocal(_program,"color");
        _moveUniformLocal  = GLHelper::GetUniformLocal(_program,"move");
        _cubeSamplerVarUniformLocal = GLHelper::GetUniformLocal(_program,"cube_tex");

        _viewMatrixUniformLocal = GLHelper::GetUniformLocal(_program,"view_matrix");
        _projectionMatrixUniformLocal = GLHelper::GetUniformLocal(_program,"projection_matrix");

        glVertexAttribPointer(_kPosAttribLocal,vertex_pos_comp_count,GL_FLOAT,GL_FALSE,
                              0,BUFF_OFFSET(0));
        glEnableVertexAttribArray(_kPosAttribLocal);
        glVertexAttribPointer(_kColorAttribLocal,vertex_color_comp_count,GL_FLOAT,GL_FALSE,
                              0,BUFF_OFFSET(vertex_data_size));
        glEnableVertexAttribArray(_kColorAttribLocal);

        glUniform1i(_cubeSamplerVarUniformLocal,0);

        glBindVertexArray(0);
        glBindBuffer(GL_ARRAY_BUFFER,0);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
    }
    glUseProgram(0);
}
Ejemplo n.º 6
0
void GCube::Init()
{
    _is_inited = true;

    const char vs[] =
            "#version 410\n"
            "layout (location = 0) in vec3 vi_position;\n"
            "layout (location = 1) in vec3 vi_color;\n"
            "uniform vec3   move;\n"
            "uniform float  scale;\n"
            "uniform vec4   color;\n"
            "uniform mat4x4 view_matrix;\n"
            "uniform mat4x4 projection_matrix;\n"
            "out vec4 vo_color;\n"
            "void main(void)\n"
            "{\n"
            "    mat4 scale_mat = mat4(scale);\n"
            "    scale_mat[3].w = 1.0f;\n"
            "    vec4 temp_pos = scale_mat*vec4(vi_position,1.0);\n"
            "    temp_pos = temp_pos+vec4(move,0.0);\n"
            "    gl_Position = projection_matrix*view_matrix*temp_pos;\n"
            "    //vo_color = color;\n"
            "    vo_color = vec4(vi_color,1.0);\n"
            "}\n";
    const char fs[] =
            "#version 410\n"
            "in vec4 vo_color;\n"
            "out vec4 fo_color;\n"
            "void main(void)\n"
            "{\n"
            "    fo_color = vo_color;\n"
            "}\n";
    _program = GLHelper::CreateShaderProgram(vs,fs);
    glUseProgram(_program);
    {
        glGenVertexArrays(1,&_vertex_arr_obj);
        glBindVertexArray(_vertex_arr_obj);

        GLfloat* vertex_data = NULL;
        GLint    vertex_data_size;
        GLfloat* vertex_color_data = NULL;
        GLint    vertex_color_data_size;
        GLuint*  vertex_index_data = NULL;
        GLint    vertex_index_data_size;
        GLint    vertex_pos_comp_count;
        GLint    vertex_color_comp_count;

        GetVertexData(vertex_data,vertex_index_data,vertex_color_data,
                      vertex_data_size,vertex_index_data_size,vertex_color_data_size,
                      vertex_pos_comp_count,vertex_color_comp_count);

        glGenBuffers(1,&_vertex_buffer);
        glBindBuffer(GL_ARRAY_BUFFER,_vertex_buffer);
        glBufferData(GL_ARRAY_BUFFER,vertex_data_size+vertex_color_data_size,NULL,GL_STATIC_DRAW);
        glBufferSubData(GL_ARRAY_BUFFER,0,vertex_data_size,vertex_data);
        glBufferSubData(GL_ARRAY_BUFFER,vertex_data_size,vertex_color_data_size,vertex_color_data);

        glGenBuffers(1,&_vertex_index_buffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_vertex_index_buffer);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,vertex_index_data_size,vertex_index_data,GL_STATIC_DRAW);

        _scaleUniformLocal = GLHelper::GetUniformLocal(_program,"scale");
        _colorUniformLocal = GLHelper::GetUniformLocal(_program,"color");
        _moveUniformLocal  = GLHelper::GetUniformLocal(_program,"move");
        _viewMatrixUniformLocal = GLHelper::GetUniformLocal(_program,"view_matrix");
        _projectionMatrixUniformLocal = GLHelper::GetUniformLocal(_program,"projection_matrix");

        glVertexAttribPointer(_kPosAttribLocal,vertex_pos_comp_count,GL_FLOAT,GL_FALSE,
                              0,BUFF_OFFSET(0));
        glEnableVertexAttribArray(_kPosAttribLocal);
        glVertexAttribPointer(_kColorAttribLocal,vertex_color_comp_count,GL_FLOAT,GL_FALSE,
                              0,BUFF_OFFSET(vertex_data_size));
        glEnableVertexAttribArray(_kColorAttribLocal);

        glBindVertexArray(0);
        glBindBuffer(GL_ARRAY_BUFFER,0);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
    }
    glUseProgram(0);
}