static void blit_to_texture(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch) { d3d_video_t *d3d = (d3d_video_t*)data; if (d3d->last_width != width || d3d->last_height != height) clear_texture(data); D3DLOCKED_RECT d3dlr; D3DTexture_LockRect(d3d->tex, 0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK); #if defined(_XBOX360) D3DSURFACE_DESC desc; d3d->tex->GetLevelDesc(0, &desc); XGCopySurface(d3dlr.pBits, d3dlr.Pitch, width, height, desc.Format, NULL, frame, pitch, desc.Format, NULL, 0, 0); #elif defined(_XBOX1) for (unsigned y = 0; y < height; y++) { const uint8_t *in = (const uint8_t*)frame + y * pitch; uint8_t *out = (uint8_t*)d3dlr.pBits + y * d3dlr.Pitch; memcpy(out, in, width * d3d->pixel_size); } #endif }
enum piglit_result piglit_display(void) { bool pass = true; GLuint tex; int i; tex = create_texture(); clear_texture(tex); glBindTexture(GL_TEXTURE_CUBE_MAP, tex); draw_faces(); glBindTexture(GL_TEXTURE_CUBE_MAP, 0); glDeleteTextures(1, &tex); for (i = 0; i < 6; i++) pass &= piglit_probe_pixel_rgb(i, 0, faces[i].color); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
enum piglit_result piglit_display(void) { bool pass = true; GLuint tex; tex = create_texture(); clear_texture(tex); draw_tex(tex); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0); glDeleteTextures(1, &tex); pass &= piglit_probe_rect_rgb(VALUE_CLEAR_X * 2, VALUE_CLEAR_Y * 2, VALUE_CLEAR_WIDTH * 2, VALUE_CLEAR_HEIGHT * 2, green); pass &= piglit_probe_rect_rgb(ZERO_CLEAR_X * 2, ZERO_CLEAR_Y * 2, ZERO_CLEAR_WIDTH * 2, ZERO_CLEAR_HEIGHT * 2, black); /* Everything else should be red */ pass &= probe_tex(0, 0, TEX_WIDTH, ZERO_CLEAR_Y); pass &= probe_tex(0, ZERO_CLEAR_Y, ZERO_CLEAR_X, ZERO_CLEAR_HEIGHT); pass &= probe_tex(ZERO_CLEAR_X + ZERO_CLEAR_WIDTH, ZERO_CLEAR_Y, TEX_WIDTH - ZERO_CLEAR_X - ZERO_CLEAR_WIDTH, ZERO_CLEAR_HEIGHT); pass &= probe_tex(0, VALUE_CLEAR_Y, VALUE_CLEAR_X, VALUE_CLEAR_HEIGHT); pass &= probe_tex(VALUE_CLEAR_X + VALUE_CLEAR_WIDTH, VALUE_CLEAR_Y, TEX_WIDTH - VALUE_CLEAR_X - VALUE_CLEAR_WIDTH, VALUE_CLEAR_HEIGHT); pass &= probe_tex(0, VALUE_CLEAR_Y + VALUE_CLEAR_HEIGHT, TEX_WIDTH, TEX_HEIGHT - VALUE_CLEAR_Y - VALUE_CLEAR_HEIGHT); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
void RenderChain::blit_to_texture(const void *frame, unsigned width, unsigned height, unsigned pitch) { Pass &first = passes[0]; if (first.last_width != width || first.last_height != height) clear_texture(first); D3DLOCKED_RECT d3dlr; if (SUCCEEDED(first.tex->LockRect(0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK))) { for (unsigned y = 0; y < height; y++) { const uint8_t *in = reinterpret_cast<const uint8_t*>(frame) + y * pitch; uint8_t *out = reinterpret_cast<uint8_t*>(d3dlr.pBits) + y * d3dlr.Pitch; memcpy(out, in, width * pixel_size); } first.tex->UnlockRect(0); } }
unsigned int refresh_texture(struct Picture * picturedata) { clear_texture(picturedata); make_texture(picturedata,frame.mipmaping); return 1; }