mirror of
https://github.com/raysan5/raylib.git
synced 2026-04-10 01:09:10 -04:00
Code review, format tweaks, defined version to 1.5
This commit is contained in:
465
src/external/rlsw.h
vendored
465
src/external/rlsw.h
vendored
@ -1,6 +1,6 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* rlsw v1.0 - An OpenGL 1.1-style software renderer implementation
|
||||
* rlsw v1.5 - An OpenGL 1.1-style software renderer implementation
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* rlsw is a custom OpenGL 1.1-style implementation on software, intended to provide all
|
||||
@ -87,6 +87,8 @@
|
||||
#ifndef RLSW_H
|
||||
#define RLSW_H
|
||||
|
||||
#define RLGL_VERSION "1.5"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
@ -942,21 +944,21 @@ typedef struct {
|
||||
} sw_texture_t;
|
||||
|
||||
typedef struct {
|
||||
sw_texture_t color;
|
||||
sw_texture_t depth;
|
||||
sw_texture_t color; // Default framebuffer color texture
|
||||
sw_texture_t depth; // Default framebuffer depth texture
|
||||
} sw_default_framebuffer_t;
|
||||
|
||||
typedef struct {
|
||||
sw_handle_t colorAttachment;
|
||||
sw_handle_t depthAttachment;
|
||||
sw_handle_t colorAttachment; // Framebuffer color attachment id
|
||||
sw_handle_t depthAttachment; // Framebuffer depth attachment id
|
||||
} sw_framebuffer_t;
|
||||
|
||||
typedef struct {
|
||||
void *data; // flat storage [capacity*stride] bytes
|
||||
uint8_t *gen; // generation per slot [capacity]
|
||||
uint32_t *freeList; // free indices stack [capacity]
|
||||
void *data; // Flat storage [capacity*stride] bytes
|
||||
uint8_t *gen; // Generation per slot [capacity]
|
||||
uint32_t *freeList; // Free indices stack [capacity]
|
||||
int freeCount;
|
||||
int watermark; // next blank index (starts at 1, skips 0)
|
||||
int watermark; // Next blank index (starts at 1, skips 0)
|
||||
int capacity;
|
||||
size_t stride;
|
||||
} sw_pool_t;
|
||||
@ -967,6 +969,7 @@ typedef void (*sw_raster_quad_f)(const sw_vertex_t *v0, const sw_vertex_t *v1, c
|
||||
typedef void (*sw_raster_line_f)(const sw_vertex_t *v0, const sw_vertex_t *v1);
|
||||
typedef void (*sw_raster_point_f)(const sw_vertex_t *v);
|
||||
|
||||
// Graphic context data structure
|
||||
typedef struct {
|
||||
sw_default_framebuffer_t framebuffer; // Default framebuffer
|
||||
float clearColor[4]; // Clear color of the framebuffer
|
||||
@ -1019,11 +1022,11 @@ typedef struct {
|
||||
sw_texture_t *boundTexture; // Texture currently bound
|
||||
sw_pool_t texturePool; // Texture object pool
|
||||
|
||||
SWfactor srcFactor;
|
||||
SWfactor dstFactor;
|
||||
SWfactor srcFactor; // Source blending factor
|
||||
SWfactor dstFactor; // Destination bleending factor
|
||||
|
||||
sw_blend_factor_t srcFactorFunc;
|
||||
sw_blend_factor_t dstFactorFunc;
|
||||
sw_blend_factor_t srcFactorFunc; // Source blend function
|
||||
sw_blend_factor_t dstFactorFunc; // Destination blend function
|
||||
|
||||
SWface cullFace; // Faces to cull
|
||||
SWerrcode errCode; // Last error code
|
||||
@ -1242,10 +1245,7 @@ static inline void sw_add_vertex_grad_PTCH(sw_vertex_t *SW_RESTRICT out, const s
|
||||
out->homogeneous[3] += gradients->homogeneous[3];
|
||||
}
|
||||
|
||||
static inline void sw_add_vertex_grad_scaled_PTCH(
|
||||
sw_vertex_t *SW_RESTRICT out,
|
||||
const sw_vertex_t *SW_RESTRICT gradients,
|
||||
float scale)
|
||||
static inline void sw_add_vertex_grad_scaled_PTCH(sw_vertex_t *SW_RESTRICT out, const sw_vertex_t *SW_RESTRICT gradients, float scale)
|
||||
{
|
||||
// Add gradients to Position
|
||||
out->position[0] += gradients->position[0]*scale;
|
||||
@ -1276,13 +1276,13 @@ static inline uint16_t sw_float_to_half_ui(uint32_t ui)
|
||||
int32_t s = (ui >> 16) & 0x8000;
|
||||
int32_t em = ui & 0x7fffffff;
|
||||
|
||||
// bias exponent and round to nearest; 112 is relative exponent bias (127-15)
|
||||
// Bias exponent and round to nearest; 112 is relative exponent bias (127-15)
|
||||
int32_t h = (em - (112 << 23) + (1 << 12)) >> 13;
|
||||
|
||||
// underflow: flush to zero; 113 encodes exponent -14
|
||||
// Underflow: flush to zero; 113 encodes exponent -14
|
||||
h = (em < (113 << 23))? 0 : h;
|
||||
|
||||
// overflow: infinity; 143 encodes exponent 16
|
||||
// Overflow: infinity; 143 encodes exponent 16
|
||||
h = (em >= (143 << 23))? 0x7c00 : h;
|
||||
|
||||
// NaN; note that we convert all types of NaN to qNaN
|
||||
@ -1296,13 +1296,13 @@ static inline uint32_t sw_half_to_float_ui(uint16_t h)
|
||||
uint32_t s = (unsigned)(h & 0x8000) << 16;
|
||||
int32_t em = h & 0x7fff;
|
||||
|
||||
// bias exponent and pad mantissa with 0; 112 is relative exponent bias (127-15)
|
||||
// Bias exponent and pad mantissa with 0; 112 is relative exponent bias (127-15)
|
||||
int32_t r = (em + (112 << 10)) << 13;
|
||||
|
||||
// denormal: flush to zero
|
||||
// Denormal: flush to zero
|
||||
r = (em < (1 << 10))? 0 : r;
|
||||
|
||||
// infinity/NaN; note that we preserve NaN payload as a byproduct of unifying inf/nan cases
|
||||
// Infinity/NaN; note that we preserve NaN payload as a byproduct of unifying inf/nan cases
|
||||
// 112 is an exponent bias fixup; since we already applied it once, applying it twice converts 31 to 255
|
||||
r += (em >= (31 << 10))? (112 << 23) : 0;
|
||||
|
||||
@ -1344,7 +1344,7 @@ static inline uint32_t sw_compress_8to4(uint8_t v) { return v >> 4; }
|
||||
static inline uint32_t sw_compress_8to5(uint8_t v) { return v >> 3; }
|
||||
static inline uint32_t sw_compress_8to6(uint8_t v) { return v >> 2; }
|
||||
|
||||
static inline uint32_t sw_compress_fto1(float v) { return v >= 0.5f ? 1 : 0; }
|
||||
static inline uint32_t sw_compress_fto1(float v) { return (v >= 0.5f)? 1 : 0; }
|
||||
static inline uint32_t sw_compress_fto2(float v) { return (uint32_t)(v*3.0f + 0.5f) & 0x03; }
|
||||
static inline uint32_t sw_compress_fto3(float v) { return (uint32_t)(v*7.0f + 0.5f) & 0x07; }
|
||||
static inline uint32_t sw_compress_fto4(float v) { return (uint32_t)(v*15.0f + 0.5f) & 0x0F; }
|
||||
@ -1752,48 +1752,20 @@ static inline void sw_pixel_get_color8(uint8_t *SW_RESTRICT color, const void *S
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
sw_pixel_get_color8_GRAYSCALE(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA:
|
||||
sw_pixel_get_color8_GRAYALPHA(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2:
|
||||
sw_pixel_get_color8_R3G3B2(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5:
|
||||
sw_pixel_get_color8_R5G6B5(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8:
|
||||
sw_pixel_get_color8_R8G8B8(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1:
|
||||
sw_pixel_get_color8_R5G5B5A1(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4:
|
||||
sw_pixel_get_color8_R4G4B4A4(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8:
|
||||
sw_pixel_get_color8_R8G8B8A8(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32:
|
||||
sw_pixel_get_color8_R32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32:
|
||||
sw_pixel_get_color8_R32G32B32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32:
|
||||
sw_pixel_get_color8_R32G32B32A32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
sw_pixel_get_color8_R16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
sw_pixel_get_color8_R16G16B16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
sw_pixel_get_color8_R16G16B16A16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE: sw_pixel_get_color8_GRAYSCALE(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA: sw_pixel_get_color8_GRAYALPHA(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2: sw_pixel_get_color8_R3G3B2(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5: sw_pixel_get_color8_R5G6B5(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8: sw_pixel_get_color8_R8G8B8(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1: sw_pixel_get_color8_R5G5B5A1(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4: sw_pixel_get_color8_R4G4B4A4(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8: sw_pixel_get_color8_R8G8B8A8(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32: sw_pixel_get_color8_R32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32: sw_pixel_get_color8_R32G32B32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32: sw_pixel_get_color8_R32G32B32A32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16: sw_pixel_get_color8_R16(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16: sw_pixel_get_color8_R16G16B16(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16: sw_pixel_get_color8_R16G16B16A16(color, pixels, offset); break;
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
@ -1805,8 +1777,8 @@ static inline void sw_pixel_get_color8(uint8_t *SW_RESTRICT color, const void *S
|
||||
color[1] = 0.0f;
|
||||
color[2] = 0.0f;
|
||||
color[3] = 0.0f;
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1921,55 +1893,27 @@ static inline void sw_pixel_set_color8(void *SW_RESTRICT pixels, const uint8_t *
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
sw_pixel_set_color8_GRAYSCALE(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA:
|
||||
sw_pixel_set_color8_GRAYALPHA(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2:
|
||||
sw_pixel_set_color8_R3G3B2(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5:
|
||||
sw_pixel_set_color8_R5G6B5(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8:
|
||||
sw_pixel_set_color8_R8G8B8(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1:
|
||||
sw_pixel_set_color8_R5G5B5A1(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4:
|
||||
sw_pixel_set_color8_R4G4B4A4(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8:
|
||||
sw_pixel_set_color8_R8G8B8A8(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32:
|
||||
sw_pixel_set_color8_R32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32:
|
||||
sw_pixel_set_color8_R32G32B32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32:
|
||||
sw_pixel_set_color8_R32G32B32A32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
sw_pixel_set_color8_R16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
sw_pixel_set_color8_R16G16B16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
sw_pixel_set_color8_R16G16B16A16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE: sw_pixel_set_color8_GRAYSCALE(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA: sw_pixel_set_color8_GRAYALPHA(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2: sw_pixel_set_color8_R3G3B2(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5: sw_pixel_set_color8_R5G6B5(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8: sw_pixel_set_color8_R8G8B8(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1: sw_pixel_set_color8_R5G5B5A1(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4: sw_pixel_set_color8_R4G4B4A4(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8: sw_pixel_set_color8_R8G8B8A8(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32: sw_pixel_set_color8_R32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32: sw_pixel_set_color8_R32G32B32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32: sw_pixel_set_color8_R32G32B32A32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16: sw_pixel_set_color8_R16(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16: sw_pixel_set_color8_R16G16B16(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16: sw_pixel_set_color8_R16G16B16A16(pixels, color, offset); break;
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
case SW_PIXELFORMAT_DEPTH_D16:
|
||||
case SW_PIXELFORMAT_DEPTH_D32:
|
||||
case SW_PIXELFORMAT_COUNT:
|
||||
break;
|
||||
case SW_PIXELFORMAT_COUNT: break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2062,7 +2006,7 @@ static inline void sw_pixel_get_color_R8G8B8A8(float *SW_RESTRICT color, const v
|
||||
_mm_storeu_ps(color, fvals);
|
||||
|
||||
#elif defined(SW_HAS_RVV)
|
||||
// TODO: Sample code generated by AI, needs testing and review
|
||||
// TODO: WARNING: Sample code generated by AI, needs testing and review
|
||||
size_t vl = __riscv_vsetvl_e8m1(4); // Set vector length for 8-bit input elements
|
||||
vuint8m1_t vsrc_u8 = __riscv_vle8_v_u8m1(src, vl); // Load 4 unsigned 8-bit integers
|
||||
vuint32m1_t vsrc_u32 = __riscv_vwcvt_xu_u_v_u32m1(vsrc_u8, vl); // Widen to 32-bit unsigned integers
|
||||
@ -2136,48 +2080,20 @@ static inline void sw_pixel_get_color(float *SW_RESTRICT color, const void *SW_R
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
sw_pixel_get_color_GRAYSCALE(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA:
|
||||
sw_pixel_get_color_GRAYALPHA(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2:
|
||||
sw_pixel_get_color_R3G3B2(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5:
|
||||
sw_pixel_get_color_R5G6B5(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8:
|
||||
sw_pixel_get_color_R8G8B8(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1:
|
||||
sw_pixel_get_color_R5G5B5A1(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4:
|
||||
sw_pixel_get_color_R4G4B4A4(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8:
|
||||
sw_pixel_get_color_R8G8B8A8(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32:
|
||||
sw_pixel_get_color_R32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32:
|
||||
sw_pixel_get_color_R32G32B32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32:
|
||||
sw_pixel_get_color_R32G32B32A32(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
sw_pixel_get_color_R16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
sw_pixel_get_color_R16G16B16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
sw_pixel_get_color_R16G16B16A16(color, pixels, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE: sw_pixel_get_color_GRAYSCALE(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA: sw_pixel_get_color_GRAYALPHA(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2: sw_pixel_get_color_R3G3B2(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5: sw_pixel_get_color_R5G6B5(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8: sw_pixel_get_color_R8G8B8(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1: sw_pixel_get_color_R5G5B5A1(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4: sw_pixel_get_color_R4G4B4A4(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8: sw_pixel_get_color_R8G8B8A8(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32: sw_pixel_get_color_R32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32: sw_pixel_get_color_R32G32B32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32: sw_pixel_get_color_R32G32B32A32(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16: sw_pixel_get_color_R16(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16: sw_pixel_get_color_R16G16B16(color, pixels, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16: sw_pixel_get_color_R16G16B16A16(color, pixels, offset); break;
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
@ -2189,8 +2105,8 @@ static inline void sw_pixel_get_color(float *SW_RESTRICT color, const void *SW_R
|
||||
color[1] = 0.0f;
|
||||
color[2] = 0.0f;
|
||||
color[3] = 0.0f;
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2277,7 +2193,7 @@ static inline void sw_pixel_set_color_R8G8B8A8(void *SW_RESTRICT pixels, const f
|
||||
_mm_storeu_si32(dst, i8);
|
||||
|
||||
#elif defined(SW_HAS_RVV)
|
||||
// TODO: Sample code generated by AI, needs testing and review
|
||||
// TODO: WARNING: Sample code generated by AI, needs testing and review
|
||||
// REVIEW: It shouldn't perform so many operations; take inspiration from other versions
|
||||
// NOTE: RVV 1.0 specs define the use of __riscv_ prefix for instrinsic functions
|
||||
size_t vl = __riscv_vsetvl_e32m1(4); // Load up to 4 floats into a vector register
|
||||
@ -2350,55 +2266,26 @@ static inline void sw_pixel_set_color(void *SW_RESTRICT pixels, const float *SW_
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
sw_pixel_set_color_GRAYSCALE(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA:
|
||||
sw_pixel_set_color_GRAYALPHA(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2:
|
||||
sw_pixel_set_color_R3G3B2(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5:
|
||||
sw_pixel_set_color_R5G6B5(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8:
|
||||
sw_pixel_set_color_R8G8B8(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1:
|
||||
sw_pixel_set_color_R5G5B5A1(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4:
|
||||
sw_pixel_set_color_R4G4B4A4(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8:
|
||||
sw_pixel_set_color_R8G8B8A8(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32:
|
||||
sw_pixel_set_color_R32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32:
|
||||
sw_pixel_set_color_R32G32B32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32:
|
||||
sw_pixel_set_color_R32G32B32A32(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
sw_pixel_set_color_R16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
sw_pixel_set_color_R16G16B16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
sw_pixel_set_color_R16G16B16A16(pixels, color, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE: sw_pixel_set_color_GRAYSCALE(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_GRAYALPHA: sw_pixel_set_color_GRAYALPHA(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R3G3B2: sw_pixel_set_color_R3G3B2(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G6B5: sw_pixel_set_color_R5G6B5(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8: sw_pixel_set_color_R8G8B8(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R5G5B5A1: sw_pixel_set_color_R5G5B5A1(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R4G4B4A4: sw_pixel_set_color_R4G4B4A4(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R8G8B8A8: sw_pixel_set_color_R8G8B8A8(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32: sw_pixel_set_color_R32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32: sw_pixel_set_color_R32G32B32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R32G32B32A32: sw_pixel_set_color_R32G32B32A32(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16: sw_pixel_set_color_R16(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16: sw_pixel_set_color_R16G16B16(pixels, color, offset); break;
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16: sw_pixel_set_color_R16G16B16A16(pixels, color, offset); break;
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
case SW_PIXELFORMAT_DEPTH_D16:
|
||||
case SW_PIXELFORMAT_DEPTH_D32:
|
||||
case SW_PIXELFORMAT_COUNT:
|
||||
break;
|
||||
case SW_PIXELFORMAT_COUNT: break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2421,12 +2308,9 @@ static inline float sw_pixel_get_depth(const void *pixels, uint32_t offset, sw_p
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
return sw_pixel_get_depth_D8(pixels, offset);
|
||||
case SW_PIXELFORMAT_DEPTH_D16:
|
||||
return sw_pixel_get_depth_D16(pixels, offset);
|
||||
case SW_PIXELFORMAT_DEPTH_D32:
|
||||
return sw_pixel_get_depth_D32(pixels, offset);
|
||||
case SW_PIXELFORMAT_DEPTH_D8: return sw_pixel_get_depth_D8(pixels, offset);
|
||||
case SW_PIXELFORMAT_DEPTH_D16: return sw_pixel_get_depth_D16(pixels, offset);
|
||||
case SW_PIXELFORMAT_DEPTH_D32: return sw_pixel_get_depth_D32(pixels, offset);
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
@ -2443,8 +2327,7 @@ static inline float sw_pixel_get_depth(const void *pixels, uint32_t offset, sw_p
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
case SW_PIXELFORMAT_COUNT:
|
||||
break;
|
||||
case SW_PIXELFORMAT_COUNT: break;
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
@ -2469,15 +2352,9 @@ static inline void sw_pixel_set_depth(void *pixels, float depth, uint32_t offset
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SW_PIXELFORMAT_DEPTH_D8:
|
||||
sw_pixel_set_depth_D8(pixels, depth, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_DEPTH_D16:
|
||||
sw_pixel_set_depth_D16(pixels, depth, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_DEPTH_D32:
|
||||
sw_pixel_set_depth_D32(pixels, depth, offset);
|
||||
break;
|
||||
case SW_PIXELFORMAT_DEPTH_D8: sw_pixel_set_depth_D8(pixels, depth, offset); break;
|
||||
case SW_PIXELFORMAT_DEPTH_D16: w_pixel_set_depth_D16(pixels, depth, offset); break;
|
||||
case SW_PIXELFORMAT_DEPTH_D32: sw_pixel_set_depth_D32(pixels, depth, offset); break;
|
||||
|
||||
case SW_PIXELFORMAT_UNKNOWN:
|
||||
case SW_PIXELFORMAT_COLOR_GRAYSCALE:
|
||||
@ -2494,8 +2371,7 @@ static inline void sw_pixel_set_depth(void *pixels, float depth, uint32_t offset
|
||||
case SW_PIXELFORMAT_COLOR_R16:
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16:
|
||||
case SW_PIXELFORMAT_COLOR_R16G16B16A16:
|
||||
case SW_PIXELFORMAT_COUNT:
|
||||
break;
|
||||
case SW_PIXELFORMAT_COUNT: break;
|
||||
}
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------
|
||||
@ -2812,11 +2688,8 @@ static inline void sw_framebuffer_output_copy(void* dst, const sw_texture_t* buf
|
||||
}
|
||||
}
|
||||
|
||||
static inline void sw_framebuffer_output_blit(
|
||||
void* dst, const sw_texture_t* buffer,
|
||||
int xDst, int yDst, int wDst, int hDst,
|
||||
int xSrc, int ySrc, int wSrc, int hSrc,
|
||||
sw_pixelformat_t format)
|
||||
static inline void sw_framebuffer_output_blit(void *dst, const sw_texture_t *buffer,
|
||||
int xDst, int yDst, int wDst, int hDst, int xSrc, int ySrc, int wSrc, int hSrc, sw_pixelformat_t format)
|
||||
{
|
||||
const uint8_t *srcBase = buffer->pixels;
|
||||
|
||||
@ -3692,7 +3565,8 @@ static inline bool sw_line_clip_coord(float q, float p, float *t0, float *t1)
|
||||
static bool sw_line_clip(sw_vertex_t *v0, sw_vertex_t *v1)
|
||||
{
|
||||
float t0 = 0.0f, t1 = 1.0f;
|
||||
float dH[4], dC[4];
|
||||
float dH[4] = { 0 }
|
||||
float dC[4] = { 0 };
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
@ -4460,7 +4334,7 @@ void swLoadIdentity(void)
|
||||
|
||||
void swTranslatef(float x, float y, float z)
|
||||
{
|
||||
sw_matrix_t mat;
|
||||
sw_matrix_t mat = { 0 };
|
||||
sw_matrix_id(mat);
|
||||
|
||||
mat[12] = x;
|
||||
@ -4490,7 +4364,7 @@ void swRotatef(float angle, float x, float y, float z)
|
||||
float cosres = cosf(angle);
|
||||
float t = 1.0f - cosres;
|
||||
|
||||
sw_matrix_t mat;
|
||||
sw_matrix_t mat = { 0 };
|
||||
|
||||
mat[0] = x*x*t + cosres;
|
||||
mat[1] = y*x*t + z*sinres;
|
||||
@ -4519,7 +4393,7 @@ void swRotatef(float angle, float x, float y, float z)
|
||||
|
||||
void swScalef(float x, float y, float z)
|
||||
{
|
||||
sw_matrix_t mat;
|
||||
sw_matrix_t mat = { 0 };
|
||||
|
||||
mat[0] = x, mat[1] = 0, mat[2] = 0, mat[3] = 0;
|
||||
mat[4] = 0, mat[5] = y, mat[6] = 0, mat[7] = 0;
|
||||
@ -4540,7 +4414,7 @@ void swMultMatrixf(const float *mat)
|
||||
|
||||
void swFrustum(double left, double right, double bottom, double top, double znear, double zfar)
|
||||
{
|
||||
sw_matrix_t mat;
|
||||
sw_matrix_t mat = { 0 };
|
||||
|
||||
double rl = right - left;
|
||||
double tb = top - bottom;
|
||||
@ -4573,7 +4447,7 @@ void swFrustum(double left, double right, double bottom, double top, double znea
|
||||
|
||||
void swOrtho(double left, double right, double bottom, double top, double znear, double zfar)
|
||||
{
|
||||
sw_matrix_t mat;
|
||||
sw_matrix_t mat = { 0 };
|
||||
|
||||
double rl = right - left;
|
||||
double tb = top - bottom;
|
||||
@ -4695,7 +4569,7 @@ void swVertex4fv(const float *v)
|
||||
|
||||
void swColor3ub(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = (float)r*SW_INV_255;
|
||||
cv[1] = (float)g*SW_INV_255;
|
||||
cv[2] = (float)b*SW_INV_255;
|
||||
@ -4706,7 +4580,7 @@ void swColor3ub(uint8_t r, uint8_t g, uint8_t b)
|
||||
|
||||
void swColor3ubv(const uint8_t *v)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = (float)v[0]*SW_INV_255;
|
||||
cv[1] = (float)v[1]*SW_INV_255;
|
||||
cv[2] = (float)v[2]*SW_INV_255;
|
||||
@ -4717,7 +4591,7 @@ void swColor3ubv(const uint8_t *v)
|
||||
|
||||
void swColor3f(float r, float g, float b)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = r;
|
||||
cv[1] = g;
|
||||
cv[2] = b;
|
||||
@ -4728,7 +4602,7 @@ void swColor3f(float r, float g, float b)
|
||||
|
||||
void swColor3fv(const float *v)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = v[0];
|
||||
cv[1] = v[1];
|
||||
cv[2] = v[2];
|
||||
@ -4739,7 +4613,7 @@ void swColor3fv(const float *v)
|
||||
|
||||
void swColor4ub(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = (float)r*SW_INV_255;
|
||||
cv[1] = (float)g*SW_INV_255;
|
||||
cv[2] = (float)b*SW_INV_255;
|
||||
@ -4750,7 +4624,7 @@ void swColor4ub(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
|
||||
|
||||
void swColor4ubv(const uint8_t *v)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = (float)v[0]*SW_INV_255;
|
||||
cv[1] = (float)v[1]*SW_INV_255;
|
||||
cv[2] = (float)v[2]*SW_INV_255;
|
||||
@ -4761,7 +4635,7 @@ void swColor4ubv(const uint8_t *v)
|
||||
|
||||
void swColor4f(float r, float g, float b, float a)
|
||||
{
|
||||
float cv[4];
|
||||
float cv[4] = { 0 };
|
||||
cv[0] = r;
|
||||
cv[1] = g;
|
||||
cv[2] = b;
|
||||
@ -4891,18 +4765,10 @@ void swDrawElements(SWdraw mode, int count, int type, const void *indices)
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SW_UNSIGNED_BYTE:
|
||||
indicesUb = (const uint8_t *)indices;
|
||||
break;
|
||||
case SW_UNSIGNED_SHORT:
|
||||
indicesUs = (const uint16_t *)indices;
|
||||
break;
|
||||
case SW_UNSIGNED_INT:
|
||||
indicesUi = (const uint32_t *)indices;
|
||||
break;
|
||||
default:
|
||||
RLSW.errCode = SW_INVALID_ENUM;
|
||||
return;
|
||||
case SW_UNSIGNED_BYTE: indicesUb = (const uint8_t *)indices; break;
|
||||
case SW_UNSIGNED_SHORT: indicesUs = (const uint16_t *)indices; break;
|
||||
case SW_UNSIGNED_INT: indicesUi = (const uint32_t *)indices; break;
|
||||
default: RLSW.errCode = SW_INVALID_ENUM; return;
|
||||
}
|
||||
|
||||
swBegin(mode);
|
||||
@ -5030,9 +4896,7 @@ void swTexStorage2D(int width, int height, SWinternalformat format)
|
||||
case SW_DEPTH_COMPONENT24: pixelFormat = SW_PIXELFORMAT_DEPTH_D32; break;
|
||||
case SW_DEPTH_COMPONENT32: pixelFormat = SW_PIXELFORMAT_DEPTH_D32; break;
|
||||
case SW_DEPTH_COMPONENT32F: pixelFormat = SW_PIXELFORMAT_DEPTH_D32; break;
|
||||
default:
|
||||
RLSW.errCode = SW_INVALID_ENUM;
|
||||
return;
|
||||
default: RLSW.errCode = SW_INVALID_ENUM; return;
|
||||
}
|
||||
|
||||
(void)sw_texture_alloc(RLSW.boundTexture, NULL, width, height, pixelFormat);
|
||||
@ -5114,28 +4978,26 @@ void swTexParameteri(int param, int value)
|
||||
switch (param)
|
||||
{
|
||||
case SW_TEXTURE_MIN_FILTER:
|
||||
{
|
||||
if (!sw_is_texture_filter_valid(value)) { RLSW.errCode = SW_INVALID_ENUM; return; }
|
||||
RLSW.boundTexture->minFilter = (SWfilter)value;
|
||||
break;
|
||||
|
||||
} break;
|
||||
case SW_TEXTURE_MAG_FILTER:
|
||||
{
|
||||
if (!sw_is_texture_filter_valid(value)) { RLSW.errCode = SW_INVALID_ENUM; return; }
|
||||
RLSW.boundTexture->magFilter = (SWfilter)value;
|
||||
break;
|
||||
|
||||
} break;
|
||||
case SW_TEXTURE_WRAP_S:
|
||||
{
|
||||
if (!sw_is_texture_wrap_valid(value)) { RLSW.errCode = SW_INVALID_ENUM; return; }
|
||||
RLSW.boundTexture->sWrap = (SWwrap)value;
|
||||
break;
|
||||
|
||||
} break;
|
||||
case SW_TEXTURE_WRAP_T:
|
||||
{
|
||||
if (!sw_is_texture_wrap_valid(value)) { RLSW.errCode = SW_INVALID_ENUM; return; }
|
||||
RLSW.boundTexture->tWrap = (SWwrap)value;
|
||||
break;
|
||||
|
||||
default:
|
||||
RLSW.errCode = SW_INVALID_ENUM;
|
||||
break;
|
||||
} break;
|
||||
default: RLSW.errCode = SW_INVALID_ENUM; break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5207,58 +5069,37 @@ void swFramebufferTexture2D(SWattachment attach, uint32_t texture)
|
||||
switch (attach)
|
||||
{
|
||||
case SW_COLOR_ATTACHMENT:
|
||||
{
|
||||
fb->colorAttachment = texture;
|
||||
RLSW.colorBuffer = sw_pool_get(&RLSW.texturePool, texture);
|
||||
break;
|
||||
} break;
|
||||
case SW_DEPTH_ATTACHMENT:
|
||||
{
|
||||
fb->depthAttachment = texture;
|
||||
RLSW.depthBuffer = sw_pool_get(&RLSW.texturePool, texture);
|
||||
break;
|
||||
default:
|
||||
RLSW.errCode = SW_INVALID_ENUM;
|
||||
break;
|
||||
} break;
|
||||
default: RLSW.errCode = SW_INVALID_ENUM; break;
|
||||
}
|
||||
}
|
||||
|
||||
SWfbstatus swCheckFramebufferStatus(void)
|
||||
{
|
||||
if (RLSW.boundFramebufferId == SW_HANDLE_NULL)
|
||||
{
|
||||
return SW_FRAMEBUFFER_COMPLETE;
|
||||
}
|
||||
if (RLSW.boundFramebufferId == SW_HANDLE_NULL) return SW_FRAMEBUFFER_COMPLETE;
|
||||
|
||||
if (RLSW.colorBuffer == NULL)
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
|
||||
}
|
||||
if (RLSW.colorBuffer == NULL) return SW_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
|
||||
|
||||
if (!sw_is_texture_complete(RLSW.colorBuffer))
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
}
|
||||
if (!sw_is_texture_complete(RLSW.colorBuffer)) return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
|
||||
if (RLSW.colorBuffer->format != SW_FRAMEBUFFER_COLOR_FORMAT)
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
}
|
||||
if (RLSW.colorBuffer->format != SW_FRAMEBUFFER_COLOR_FORMAT) return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
|
||||
if (RLSW.depthBuffer)
|
||||
{
|
||||
if (!sw_is_texture_complete(RLSW.depthBuffer))
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
}
|
||||
if (!sw_is_texture_complete(RLSW.depthBuffer)) return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
|
||||
if (RLSW.depthBuffer->format != SW_FRAMEBUFFER_DEPTH_FORMAT)
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
}
|
||||
if (RLSW.depthBuffer->format != SW_FRAMEBUFFER_DEPTH_FORMAT) return SW_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
||||
|
||||
if ((RLSW.colorBuffer->width != RLSW.depthBuffer->width) ||
|
||||
(RLSW.colorBuffer->height != RLSW.depthBuffer->height))
|
||||
{
|
||||
return SW_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
||||
}
|
||||
(RLSW.colorBuffer->height != RLSW.depthBuffer->height)) return SW_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
||||
}
|
||||
|
||||
return SW_FRAMEBUFFER_COMPLETE;
|
||||
@ -5285,23 +5126,11 @@ void swGetFramebufferAttachmentParameteriv(SWattachment attachment, SWattachget
|
||||
{
|
||||
case SW_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
|
||||
{
|
||||
switch (attachment)
|
||||
{
|
||||
case SW_COLOR_ATTACHMENT:
|
||||
*v = fb->colorAttachment;
|
||||
break;
|
||||
case SW_DEPTH_ATTACHMENT:
|
||||
*v = fb->depthAttachment;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SW_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
|
||||
{
|
||||
*v = GL_TEXTURE;
|
||||
break;
|
||||
}
|
||||
if (attachment == SW_COLOR_ATTACHMENT) *v = fb->colorAttachment;
|
||||
else if (attachment == SW_DEPTH_ATTACHMENT) *v = fb->depthAttachment;
|
||||
} break;
|
||||
case SW_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: *v = GL_TEXTURE; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5538,10 +5367,8 @@ static void SW_RASTER_TRIANGLE(const sw_vertex_t *v0, const sw_vertex_t *v1, con
|
||||
{
|
||||
vLeft.screen[1] = vRight.screen[1] = y;
|
||||
|
||||
if (vLeft.screen[0] < vRight.screen[0])
|
||||
SW_RASTER_TRIANGLE_SPAN(&vLeft, &vRight, dVXdy02.texcoord[0], dVXdy02.texcoord[1]);
|
||||
else
|
||||
SW_RASTER_TRIANGLE_SPAN(&vRight, &vLeft, dVXdy02.texcoord[0], dVXdy02.texcoord[1]);
|
||||
if (vLeft.screen[0] < vRight.screen[0]) SW_RASTER_TRIANGLE_SPAN(&vLeft, &vRight, dVXdy02.texcoord[0], dVXdy02.texcoord[1]);
|
||||
else SW_RASTER_TRIANGLE_SPAN(&vRight, &vLeft, dVXdy02.texcoord[0], dVXdy02.texcoord[1]);
|
||||
|
||||
sw_add_vertex_grad_PTCH(&vLeft, &dVXdy02);
|
||||
vLeft.screen[0] += dXdy02;
|
||||
|
||||
Reference in New Issue
Block a user