// Clip region: xmax/ymax seem to normally be one *past* the rightmost/
// bottommost pixels of the draw area. Since we render every pixel between
// and including both line endpoints, subtract one from xmax/ymax.
- const int xmin = gpu_senquack.DrawingArea[0];
- const int ymin = gpu_senquack.DrawingArea[1];
- const int xmax = gpu_senquack.DrawingArea[2] - 1;
- const int ymax = gpu_senquack.DrawingArea[3] - 1;
+ const int xmin = gpu_unai.DrawingArea[0];
+ const int ymin = gpu_unai.DrawingArea[1];
+ const int xmax = gpu_unai.DrawingArea[2] - 1;
+ const int ymax = gpu_unai.DrawingArea[3] - 1;
- x0 = GPU_EXPANDSIGN(packet.S2[2]) + gpu_senquack.DrawingOffset[0];
- y0 = GPU_EXPANDSIGN(packet.S2[3]) + gpu_senquack.DrawingOffset[1];
- x1 = GPU_EXPANDSIGN(packet.S2[4]) + gpu_senquack.DrawingOffset[0];
- y1 = GPU_EXPANDSIGN(packet.S2[5]) + gpu_senquack.DrawingOffset[1];
+ x0 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[2])) + gpu_unai.DrawingOffset[0];
+ y0 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[3])) + gpu_unai.DrawingOffset[1];
+ x1 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[4])) + gpu_unai.DrawingOffset[0];
+ y1 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[5])) + gpu_unai.DrawingOffset[1];
// Always draw top to bottom, so ensure y0 <= y1
if (y0 > y1) {
err_adjdown; // Subract this from err_term after drawing longer run
// Color to draw with (16 bits, highest of which is unset mask bit)
- uintptr_t col16 = GPU_RGB16(packet.U4[0]);
+ uintptr_t col16 = GPU_RGB16(le32_to_u32(packet.U4[0]));
- // We use u8 pointers even though PS1 has u16 framebuffer.
- // This allows pixel-drawing functions to increment dst pointer
- // directly by the passed 'incr' value, not having to shift it first.
- u8 *dst = (u8*)gpu_senquack.vram + y0 * dst_stride + x0 * dst_depth;
+ le16_t *dst = gpu_unai.vram + (y0 * dst_stride + x0 * dst_depth) / FRAME_BYTES_PER_PIXEL;
// SPECIAL CASE: Vertical line
if (dx == 0) {
// First run of pixels
dst = gpuPixelSpanDriver(dst, col16, incr_major, start_length);
- dst += incr_minor;
+ dst += incr_minor / 2;
// Middle runs of pixels
while (--minor > 0) {
}
dst = gpuPixelSpanDriver(dst, col16, incr_major, run_length);
- dst += incr_minor;
+ dst += incr_minor / 2;
}
// Final run of pixels
// Clip region: xmax/ymax seem to normally be one *past* the rightmost/
// bottommost pixels of the draw area. We'll render every pixel between
// and including both line endpoints, so subtract one from xmax/ymax.
- const int xmin = gpu_senquack.DrawingArea[0];
- const int ymin = gpu_senquack.DrawingArea[1];
- const int xmax = gpu_senquack.DrawingArea[2] - 1;
- const int ymax = gpu_senquack.DrawingArea[3] - 1;
+ const int xmin = gpu_unai.DrawingArea[0];
+ const int ymin = gpu_unai.DrawingArea[1];
+ const int xmax = gpu_unai.DrawingArea[2] - 1;
+ const int ymax = gpu_unai.DrawingArea[3] - 1;
- x0 = GPU_EXPANDSIGN(packet.S2[2]) + gpu_senquack.DrawingOffset[0];
- y0 = GPU_EXPANDSIGN(packet.S2[3]) + gpu_senquack.DrawingOffset[1];
- x1 = GPU_EXPANDSIGN(packet.S2[6]) + gpu_senquack.DrawingOffset[0];
- y1 = GPU_EXPANDSIGN(packet.S2[7]) + gpu_senquack.DrawingOffset[1];
+ x0 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[2])) + gpu_unai.DrawingOffset[0];
+ y0 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[3])) + gpu_unai.DrawingOffset[1];
+ x1 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[6])) + gpu_unai.DrawingOffset[0];
+ y1 = GPU_EXPANDSIGN(le16_to_s16(packet.U2[7])) + gpu_unai.DrawingOffset[1];
- u32 col0 = packet.U4[0];
- u32 col1 = packet.U4[2];
+ u32 col0 = le32_to_u32(packet.U4[0]);
+ u32 col1 = le32_to_u32(packet.U4[2]);
// Always draw top to bottom, so ensure y0 <= y1
if (y0 > y1) {
gcol.g = g0 << GPU_GOURAUD_FIXED_BITS;
gcol.b = b0 << GPU_GOURAUD_FIXED_BITS;
- // We use u8 pointers even though PS1 has u16 framebuffer.
- // This allows pixel-drawing functions to increment dst pointer
- // directly by the passed 'incr' value, not having to shift it first.
- u8 *dst = (u8*)gpu_senquack.vram + y0 * dst_stride + x0 * dst_depth;
+ le16_t *dst = gpu_unai.vram + (y0 * dst_stride + x0 * dst_depth) / FRAME_BYTES_PER_PIXEL;
// SPECIAL CASE: Vertical line
if (dx == 0) {
if (db) gcol.b_incr /= dy;
}
#endif
-
+
gpuPixelSpanDriver(dst, (uintptr_t)&gcol, dst_stride, dy+1);
return;
}
// First run of pixels
dst = gpuPixelSpanDriver(dst, (uintptr_t)&gcol, incr_major, start_length);
- dst += incr_minor;
+ dst += incr_minor / 2;
// Middle runs of pixels
while (--minor > 0) {
}
dst = gpuPixelSpanDriver(dst, (uintptr_t)&gcol, incr_major, run_length);
- dst += incr_minor;
+ dst += incr_minor / 2;
}
// Final run of pixels