burning v0.53

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6364 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
engineer_apple
2022-04-30 22:57:17 +00:00
parent 2d5673a1d4
commit 4fe6a16165
113 changed files with 4567 additions and 2853 deletions

View File

@ -34,6 +34,22 @@ namespace video
//! Create render target.
virtual IRenderTarget* addRenderTarget() IRR_OVERRIDE;
//! Run occlusion query. Draws mesh stored in query.
/** If the mesh shall not be rendered visible, use
overrideMaterial to disable the color and depth buffer. */
virtual void runOcclusionQuery(scene::ISceneNode* node, bool visible = false) IRR_OVERRIDE;
//! Update occlusion query. Retrieves results from GPU.
/** If the query shall not block, set the flag to false.
Update might not occur in this case, though */
virtual void updateOcclusionQuery(scene::ISceneNode* node, bool block = true) IRR_OVERRIDE;
//! Return query result.
/** Return value is the number of visible pixels/fragments.
The value is a safe approximation, i.e. can be larger then the
actual value of pixels. */
virtual u32 getOcclusionQueryResult(scene::ISceneNode* node) const IRR_OVERRIDE;
//! sets transformation
virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat) IRR_OVERRIDE;
@ -253,7 +269,8 @@ namespace video
bool resetAllRenderstates) IRR_OVERRIDE;
//pass BaseMaterialID
void setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType);
void setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType
, eBurningVertexShader vertexShader);
//! Return an index constant for the vertex shader based on a name.
virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE;
@ -328,6 +345,9 @@ namespace video
IBurningShader* CurrentShader;
IBurningShader* BurningShader[ETR2_COUNT];
PushShaderData PushShader;
void pushShader(scene::E_PRIMITIVE_TYPE pType, int testCurrent);
IDepthBuffer* DepthBuffer;
IStencilBuffer* StencilBuffer;
@ -341,9 +361,9 @@ namespace video
enum E_TRANSFORMATION_STATE_BURNING_VIDEO
{
ETS_VIEW_PROJECTION = ETS_COUNT,
ETS_PROJ_MODEL_VIEW,
ETS_MODEL_VIEW_PROJ,
ETS_MODEL_VIEW,
ETS_NORMAL, //3x3 ModelView Tansposed Inverse
ETS_NORMAL, //3x3 ModelView Transposed Inverse
ETS_COUNT_BURNING = 16
};
@ -354,12 +374,18 @@ namespace video
{
ETF_VALID = 1,
ETF_IDENTITY = 2,
ETF_TEXGEN_CAMERA_SPHERE = 4,
ETF_TEXGEN_CAMERA_REFLECTION = 8,
ETF_TEXGEN_WRAP = 16,
ETF_TEXGEN_MASK = ETF_TEXGEN_CAMERA_SPHERE | ETF_TEXGEN_CAMERA_REFLECTION | ETF_TEXGEN_WRAP
ETF_TEXGEN_MATRIX = 4, // or !ETF_IDENTITY
ETF_TEXGEN_CAMERA_SPHERE = 8,
ETF_TEXGEN_CAMERA_REFLECTION = 16,
ETF_TEXGEN_MASK = ETF_TEXGEN_CAMERA_SPHERE | ETF_TEXGEN_CAMERA_REFLECTION | ETF_TEXGEN_MATRIX
};
size_t TransformationStack; // 0 .. 3D , 1 .. 2D
enum E_TRANSFORMATION_STACK
{
ETF_STACK_3D = 0,
ETF_STACK_2D = 1,
};
size_t TransformationStack; // 0 .. 3D , 1 .. 2D, 2.. Geometric Clipper
core::matrix4 ALIGN(16) Transformation[2][ETS_COUNT_BURNING];
size_t TransformationFlag[2][ETS_COUNT_BURNING]; // E_TRANSFORMATION_FLAG
@ -375,34 +401,33 @@ namespace video
AbsRectangle Scissor;
// Vertex Cache
SVertexCache VertexCache;
SVertexShader VertexShader;
int VertexCache_reset (const void* vertices, u32 vertexCount,
const void* indices, u32 indexCount,
E_VERTEX_TYPE vType,scene::E_PRIMITIVE_TYPE pType,
E_INDEX_TYPE iType);
void VertexCache_get (s4DVertexPair* face[4] );
//void VertexCache_get (s4DVertexPair* face[4] );
void VertexCache_map_source_format();
void VertexCache_fill ( const u32 sourceIndex,const u32 destIndex );
s4DVertexPair* VertexCache_getVertex ( const u32 sourceIndex ) const;
//s4DVertexPair* VertexCache_getVertex ( const u32 sourceIndex ) const;
// culling & clipping
//size_t inline clipToHyperPlane (s4DVertexPair* burning_restrict dest, const s4DVertexPair* burning_restrict source, const size_t inCount, const sVec4 &plane );
//size_t inline clipToFrustumTest ( const s4DVertex * v ) const;
public:
size_t clipToFrustum( const size_t vIn /*, const size_t clipmask_for_face*/ );
void VertexCache_fill(const u32 sourceIndex, const u32 destIndex);
u32 clipToFrustum( const u32 vIn /*, const size_t clipmask_for_face*/ );
protected:
// holds transformed, clipped vertices for a triangle. triangle expands on clipping
// Buffer is in in pairs of 4DVertex (0 ... ndc, 1 .. dc and projected)
SAligned4DVertex Clipper;
SAligned4DVertex Clipper_temp;
SAligned4DVertex Clipper_disjoint; // __restrict helper
#ifdef SOFTWARE_DRIVER_2_LIGHTING
void lightVertex_eye ( s4DVertex *dest, u32 vertexargb );
void lightVertex_eye ( s4DVertex *dest, const u32 vertexargb );
#endif
//! Sets the fog mode.
@ -410,22 +435,29 @@ namespace video
f32 end, f32 density, bool pixelFog, bool rangeFog) IRR_OVERRIDE;
void ndc_2_dc_and_project (s4DVertexPair* dest,const s4DVertexPair* source, const size_t vIn ) const;
//void ndc_2_dc_and_project (s4DVertexPair* dest,const s4DVertexPair* source, const size_t vIn ) const;
//const is misleading. **v is const that true, but not *v..
f32 screenarea_inside (const s4DVertexPair* burning_restrict const face[] ) const;
s32 lodFactor_inside ( const s4DVertexPair* burning_restrict const face[], const size_t tex, const f32 dc_area, const f32 lod_bias ) const;
void select_polygon_mipmap_inside ( s4DVertex* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b ) const;
//f32 screenarea_inside (const s4DVertexPair* burning_restrict const face[] ) const;
//s32 lodFactor_inside ( const s4DVertexPair* burning_restrict const face[], const size_t tex, const f32 dc_area, const f32 lod_bias ) const;
//void select_polygon_mipmap_inside (s4DVertexPair* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b ) const;
void getCameraPosWorldSpace();
//void getCameraPosWorldSpace();
void assignHardwareLight(SBurningShaderLight& l, const SLight& dl);
SBurningShaderEyeSpace EyeSpace;
SBurningShaderMaterial Material;
static const sVec4 NDCPlane[6+2];
//static const sVec4 NDCPlane[6+2];
//! Built-in 2D quad for 2D rendering.
S3DVertex Quad2DVertices[4];
interlaced_control Interlaced;
f32 TexBias[2];
public:
const interlaced_control& getInterlace() { return Interlaced; }
protected:
u32 samples_passed;
#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)
core::array<IRenderTarget*> RenderTargets;