static void gl2_renderchain_init_textures_reference( void *data, void *chain_data, unsigned i, unsigned internal_fmt, unsigned texture_fmt, unsigned texture_type) { gl_t *gl = (gl_t*)data; gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; (void)chain; #ifdef HAVE_PSGL glTextureReferenceSCE(GL_TEXTURE_2D, 1, gl->tex_w, gl->tex_h, 0, (GLenum)internal_fmt, gl->tex_w * gl->base_size, gl->tex_w * gl->tex_h * i * gl->base_size); #else if (chain->egl_images) return; gl_load_texture_image(GL_TEXTURE_2D, 0, (GLenum)internal_fmt, gl->tex_w, gl->tex_h, 0, (GLenum)texture_type, (GLenum)texture_fmt, gl->empty_buf ? gl->empty_buf : NULL); #endif }
void PS3Graphics::Draw(int width, int height, uint16_t* screen) { glClear(GL_COLOR_BUFFER_BIT); glBufferSubData(GL_TEXTURE_REFERENCE_BUFFER_SCE, 0, width * height * 2, screen); glTextureReferenceSCE(GL_TEXTURE_2D, 1, width, height, 0, GL_RGB5_A1, width*2, 0); UpdateCgParams(width, height, width, height); glDrawArrays(GL_QUADS, 0, 4); DrawHUD(); last_redraw = sys_time_get_system_time(); }
int32_t PS3Graphics::PSGLReInit(int width, int height, int depth) { context_width = width; context_height = height; #ifdef CELL_DEBUG printf("ReInit called with width=%d, height=%d, depth=%d\n", width, height, depth); #endif glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glBindBuffer(GL_TEXTURE_REFERENCE_BUFFER_SCE, vbo[0]); glBufferData(GL_TEXTURE_REFERENCE_BUFFER_SCE, width * height * (depth / 8), NULL, GL_STREAM_DRAW); glTextureReferenceSCE(GL_TEXTURE_2D, 1, width, height, 0, GL_RGB5_A1, width * (depth / 8), 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); return CELL_OK; }
static void gl_init_textures(gl_t *gl) { glGenTextures(TEXTURES, gl->texture); for (unsigned i = 0; i < TEXTURES; i++) { glBindTexture(GL_TEXTURE_2D, gl->texture[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl->tex_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl->tex_filter); glTextureReferenceSCE(GL_TEXTURE_2D, 1, gl->tex_w, gl->tex_h, 0, gl->texture_fmt, gl->tex_w * gl->base_size, gl->tex_w * gl->tex_h * i * gl->base_size); } glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); }
int32_t PS3Graphics::PSGLInit() { glDisable(GL_DEPTH_TEST); glDisable(GL_SCISSOR_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDisable(GL_FOG); glDisable(GL_DITHER); glShadeModel(GL_FLAT); glEnable(GL_VSYNC_SCE); glEnable(GL_TEXTURE_2D); /* //glEnable(GL_BLEND); //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); //glBlendColor(0, 0, 0, 0); //glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); */ context_width = SCREEN_RENDER_TEXTURE_WIDTH; context_height = SCREEN_RENDER_TEXTURE_HEIGHT; InitCg(); SetViewports(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glGenBuffers(2, vbo); glBindBuffer(GL_TEXTURE_REFERENCE_BUFFER_SCE, vbo[0]); glBufferData(GL_TEXTURE_REFERENCE_BUFFER_SCE, SCREEN_RENDER_TEXTURE_HEIGHT * SCREEN_RENDER_TEXTURE_PITCH, NULL, GL_STREAM_DRAW); glTextureReferenceSCE(GL_TEXTURE_2D, 1, SCREEN_RENDER_TEXTURE_WIDTH, SCREEN_RENDER_TEXTURE_HEIGHT, 0, GL_RGB5_A1, SCREEN_RENDER_TEXTURE_PITCH, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); SetSmooth(m_smooth); // PSGL doesn't clear the screen on startup, so let's do that here. glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glColor4f(1.0, 1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); psglSwap(); // Use some initial values for the screen quad. GLfloat vertexes[] = { 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1 }; GLfloat vertex_buf[128]; __builtin_memcpy(vertex_buf, vertexes, 12 * sizeof(GLfloat)); __builtin_memcpy(vertex_buf + 32, vertexes + 12, 8 * sizeof(GLfloat)); __builtin_memcpy(vertex_buf + 32 * 3, vertexes + 12, 8 * sizeof(GLfloat)); glBindBuffer(GL_ARRAY_BUFFER, vbo[1]); glBufferData(GL_ARRAY_BUFFER, 256, vertex_buf, GL_STATIC_DRAW); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, 0); glTexCoordPointer(2, GL_FLOAT, 0, (void*)128); return CELL_OK; }