/****************************************************************\ * 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() */
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); } }
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); } }
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; }
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); }
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); }