Merged 1486-1488 from 1.4 branch, IImage methods exposed and MeshManipulator moved.
git-svn-id: http://svn.code.sf.net/p/irrlicht/code/trunk@1489 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
92015ad0bc
commit
add466a67f
@ -7,6 +7,7 @@
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "position2d.h"
|
||||
#include "rect.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
@ -43,9 +44,6 @@ class IImage : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Destructor
|
||||
virtual ~IImage() {}
|
||||
|
||||
//! Lock function. Use this to get a pointer to the image data.
|
||||
/** After you don't need the pointer anymore, you must call unlock().
|
||||
\return Pointer to the image data. What type of data is pointed to
|
||||
@ -96,13 +94,27 @@ public:
|
||||
virtual u32 getAlphaMask() const = 0;
|
||||
|
||||
//! Returns pitch of image
|
||||
virtual u32 getPitch() const = 0;
|
||||
virtual u32 getPitch() const =0;
|
||||
|
||||
//! Copies the image into the target, scaling the image to fit
|
||||
virtual void copyToScaling(void* target, s32 width, s32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) = 0;
|
||||
virtual void copyToScaling(void* target, s32 width, s32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
|
||||
|
||||
//! Copies the image into the target, scaling the image to fit
|
||||
virtual void copyToScaling(IImage* target) = 0;
|
||||
virtual void copyToScaling(IImage* target) =0;
|
||||
|
||||
//! copies this surface into another
|
||||
virtual void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0)) =0;
|
||||
|
||||
//! copies this surface into another
|
||||
virtual void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0) =0;
|
||||
|
||||
//! copies this surface into another, using the alpha mask, an cliprect and a color to add with
|
||||
virtual void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos,
|
||||
const core::rect<s32>& sourceRect, const SColor &color,
|
||||
const core::rect<s32>* clipRect = 0) =0;
|
||||
|
||||
//! fills the surface with black or white
|
||||
virtual void fill(const SColor &color) =0;
|
||||
|
||||
};
|
||||
|
||||
|
@ -29,6 +29,7 @@ namespace io
|
||||
namespace scene
|
||||
{
|
||||
class IMeshBuffer;
|
||||
class IMeshManipulator;
|
||||
} // end namespace scene
|
||||
|
||||
namespace video
|
||||
@ -781,6 +782,35 @@ namespace video
|
||||
bool ownForeignMemory=false,
|
||||
bool deleteMemory = true) = 0;
|
||||
|
||||
//! Creates an empty software image.
|
||||
/**
|
||||
\param format Desired color format of the image.
|
||||
\param size Size of the image to create.
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<s32>& size) =0;
|
||||
|
||||
//! Creates a software image by converting it to given format from another image.
|
||||
/**
|
||||
\param format Desired color format of the image.
|
||||
\param imageToCopy Image to copy to the new image.
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy) =0;
|
||||
|
||||
//! Creates a software image from a part of another image.
|
||||
/**
|
||||
\param imageToCopy Image to copy the the new image in part.
|
||||
\param pos Position of rectangle to copy.
|
||||
\param size Extents of rectangle to copy.
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IImage* createImage(IImage* imageToCopy,
|
||||
const core::position2d<s32>& pos, const core::dimension2d<s32>& size) =0;
|
||||
|
||||
//! Event handler for resize events. Only used by the engine internally.
|
||||
/** Used to notify the driver that the window was resized.
|
||||
Usually, there is no need to call this method. */
|
||||
@ -875,6 +905,9 @@ namespace video
|
||||
Software driver and the Null driver will always return 0. */
|
||||
virtual IGPUProgrammingServices* getGPUProgrammingServices() = 0;
|
||||
|
||||
//! Returns a pointer to the mesh manipulator.
|
||||
virtual scene::IMeshManipulator* getMeshManipulator() = 0;
|
||||
|
||||
//! Clears the ZBuffer.
|
||||
/** Note that you usually need not to call this method, as it
|
||||
is automatically done in IVideoDriver::beginScene() or
|
||||
|
@ -54,7 +54,7 @@ namespace irr
|
||||
CLIPCODE_RIGHT = 8
|
||||
};
|
||||
|
||||
inline u32 GetClipCode ( const AbsRectangle &r, const core::position2d<s32> &p )
|
||||
inline u32 GetClipCode( const AbsRectangle &r, const core::position2d<s32> &p )
|
||||
{
|
||||
u32 code = CLIPCODE_EMPTY;
|
||||
|
||||
@ -79,7 +79,7 @@ inline u32 GetClipCode ( const AbsRectangle &r, const core::position2d<s32> &p )
|
||||
@return: 1 if valid
|
||||
*/
|
||||
|
||||
static int ClipLine (const AbsRectangle &clipping,
|
||||
static int ClipLine(const AbsRectangle &clipping,
|
||||
core::position2d<s32> &p0,
|
||||
core::position2d<s32> &p1,
|
||||
const core::position2d<s32>& p0_in,
|
||||
@ -92,8 +92,8 @@ static int ClipLine (const AbsRectangle &clipping,
|
||||
p0 = p0_in;
|
||||
p1 = p1_in;
|
||||
|
||||
code0 = GetClipCode ( clipping, p0 );
|
||||
code1 = GetClipCode ( clipping, p1 );
|
||||
code0 = GetClipCode( clipping, p0 );
|
||||
code1 = GetClipCode( clipping, p1 );
|
||||
|
||||
// trivial accepted
|
||||
while ( code0 | code1 )
|
||||
@ -149,14 +149,14 @@ static int ClipLine (const AbsRectangle &clipping,
|
||||
// modify first point
|
||||
p0.X = x;
|
||||
p0.Y = y;
|
||||
code0 = GetClipCode ( clipping, p0 );
|
||||
code0 = GetClipCode( clipping, p0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// modify second point
|
||||
p1.X = x;
|
||||
p1.Y = y;
|
||||
code1 = GetClipCode ( clipping, p1 );
|
||||
code1 = GetClipCode( clipping, p1 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -289,7 +289,7 @@ static void RenderLine32_Blend(video::IImage *t,
|
||||
run = dx;
|
||||
while ( run )
|
||||
{
|
||||
*dst = PixelBlend32 ( *dst, argb, alpha );
|
||||
*dst = PixelBlend32( *dst, argb, alpha );
|
||||
|
||||
dst = (u32*) ( (u8*) dst + xInc ); // x += xInc
|
||||
d += m;
|
||||
@ -306,7 +306,7 @@ static void RenderLine32_Blend(video::IImage *t,
|
||||
|
||||
/*
|
||||
*/
|
||||
static void RenderLine16_Decal (video::IImage *t,
|
||||
static void RenderLine16_Decal(video::IImage *t,
|
||||
const core::position2d<s32> &p0,
|
||||
const core::position2d<s32> &p1,
|
||||
u32 argb )
|
||||
@ -371,7 +371,7 @@ static void RenderLine16_Decal (video::IImage *t,
|
||||
|
||||
/*
|
||||
*/
|
||||
static void RenderLine16_Blend (video::IImage *t,
|
||||
static void RenderLine16_Blend(video::IImage *t,
|
||||
const core::position2d<s32> &p0,
|
||||
const core::position2d<s32> &p1,
|
||||
u32 argb,
|
||||
@ -420,7 +420,7 @@ static void RenderLine16_Blend (video::IImage *t,
|
||||
run = dx;
|
||||
while ( run )
|
||||
{
|
||||
*dst = PixelBlend16 ( *dst, argb, alpha );
|
||||
*dst = PixelBlend16( *dst, argb, alpha );
|
||||
|
||||
dst = (u16*) ( (u8*) dst + xInc ); // x += xInc
|
||||
d += m;
|
||||
@ -438,7 +438,7 @@ static void RenderLine16_Blend (video::IImage *t,
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureCopy_x_to_x ( const SBlitJob * job )
|
||||
static void executeBlit_TextureCopy_x_to_x( const SBlitJob * job )
|
||||
{
|
||||
const void *src = (void*) job->src;
|
||||
void *dst = (void*) job->dst;
|
||||
@ -446,7 +446,7 @@ static void executeBlit_TextureCopy_x_to_x ( const SBlitJob * job )
|
||||
const u32 widthPitch = job->width * job->dstPixelMul;
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
memcpy ( dst, src, widthPitch );
|
||||
memcpy( dst, src, widthPitch );
|
||||
|
||||
src = (void*) ( (u8*) (src) + job->srcPitch );
|
||||
dst = (void*) ( (u8*) (dst) + job->dstPitch );
|
||||
@ -456,7 +456,7 @@ static void executeBlit_TextureCopy_x_to_x ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureCopy_32_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureCopy_32_to_16( const SBlitJob * job )
|
||||
{
|
||||
const u32 *src = static_cast<const u32*>(job->src);
|
||||
u16 *dst = static_cast<u16*>(job->dst);
|
||||
@ -466,8 +466,8 @@ static void executeBlit_TextureCopy_32_to_16 ( const SBlitJob * job )
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
//16 bit Blitter depends on pre-multiplied color
|
||||
const u32 s = PixelLerp32 ( src[dx] | 0xFF000000, extractAlpha ( src[dx] ) );
|
||||
dst[dx] = video::A8R8G8B8toA1R5G5B5 ( s );
|
||||
const u32 s = PixelLerp32( src[dx] | 0xFF000000, extractAlpha( src[dx] ) );
|
||||
dst[dx] = video::A8R8G8B8toA1R5G5B5( s );
|
||||
}
|
||||
|
||||
src = (u32*) ( (u8*) (src) + job->srcPitch );
|
||||
@ -477,7 +477,7 @@ static void executeBlit_TextureCopy_32_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureCopy_24_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureCopy_24_to_16( const SBlitJob * job )
|
||||
{
|
||||
const void *src = (void*) job->src;
|
||||
u16 *dst = (u16*) job->dst;
|
||||
@ -500,7 +500,7 @@ static void executeBlit_TextureCopy_24_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureCopy_16_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureCopy_16_to_32( const SBlitJob * job )
|
||||
{
|
||||
const u16 *src = (u16*) job->src;
|
||||
u32 *dst = (u32*) job->dst;
|
||||
@ -509,7 +509,7 @@ static void executeBlit_TextureCopy_16_to_32 ( const SBlitJob * job )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = video::A1R5G5B5toA8R8G8B8 ( src[dx] );
|
||||
dst[dx] = video::A1R5G5B5toA8R8G8B8( src[dx] );
|
||||
}
|
||||
|
||||
src = (u16*) ( (u8*) (src) + job->srcPitch );
|
||||
@ -519,7 +519,7 @@ static void executeBlit_TextureCopy_16_to_32 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureCopy_24_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureCopy_24_to_32( const SBlitJob * job )
|
||||
{
|
||||
void *src = (void*) job->src;
|
||||
u32 *dst = (u32*) job->dst;
|
||||
@ -542,7 +542,7 @@ static void executeBlit_TextureCopy_24_to_32 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureBlend_16_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureBlend_16_to_16( const SBlitJob * job )
|
||||
{
|
||||
u32 dx;
|
||||
s32 dy;
|
||||
@ -552,7 +552,7 @@ static void executeBlit_TextureBlend_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
|
||||
const u32 rdx = job->width >> 1;
|
||||
const u32 off = core::if_c_a_else_b ( job->width & 1 ,job->width - 1, 0 );
|
||||
const u32 off = core::if_c_a_else_b( job->width & 1 ,job->width - 1, 0 );
|
||||
|
||||
|
||||
if ( 0 == off )
|
||||
@ -561,7 +561,7 @@ static void executeBlit_TextureBlend_16_to_16 ( const SBlitJob * job )
|
||||
{
|
||||
for ( dx = 0; dx != rdx; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend16_simd ( dst[dx], src[dx] );
|
||||
dst[dx] = PixelBlend16_simd( dst[dx], src[dx] );
|
||||
}
|
||||
|
||||
src = (u32*) ( (u8*) (src) + job->srcPitch );
|
||||
@ -575,10 +575,10 @@ static void executeBlit_TextureBlend_16_to_16 ( const SBlitJob * job )
|
||||
{
|
||||
for ( dx = 0; dx != rdx; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend16_simd ( dst[dx], src[dx] );
|
||||
dst[dx] = PixelBlend16_simd( dst[dx], src[dx] );
|
||||
}
|
||||
|
||||
((u16*) dst)[off] = PixelBlend16 ( ((u16*) dst)[off], ((u16*) src)[off] );
|
||||
((u16*) dst)[off] = PixelBlend16( ((u16*) dst)[off], ((u16*) src)[off] );
|
||||
|
||||
src = (u32*) ( (u8*) (src) + job->srcPitch );
|
||||
dst = (u32*) ( (u8*) (dst) + job->dstPitch );
|
||||
@ -589,7 +589,7 @@ static void executeBlit_TextureBlend_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureBlend_32_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureBlend_32_to_32( const SBlitJob * job )
|
||||
{
|
||||
u32 *src = (u32*) job->src;
|
||||
u32 *dst = (u32*) job->dst;
|
||||
@ -598,7 +598,7 @@ static void executeBlit_TextureBlend_32_to_32 ( const SBlitJob * job )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend32 ( dst[dx], src[dx] );
|
||||
dst[dx] = PixelBlend32( dst[dx], src[dx] );
|
||||
}
|
||||
src = (u32*) ( (u8*) (src) + job->srcPitch );
|
||||
dst = (u32*) ( (u8*) (dst) + job->dstPitch );
|
||||
@ -607,7 +607,7 @@ static void executeBlit_TextureBlend_32_to_32 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureBlendColor_16_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureBlendColor_16_to_16( const SBlitJob * job )
|
||||
{
|
||||
u16 *src = (u16*) job->src;
|
||||
u16 *dst = (u16*) job->dst;
|
||||
@ -617,7 +617,7 @@ static void executeBlit_TextureBlendColor_16_to_16 ( const SBlitJob * job )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend16 ( dst[dx], PixelMul16_2 ( src[dx], blend ) );
|
||||
dst[dx] = PixelBlend16( dst[dx], PixelMul16_2( src[dx], blend ) );
|
||||
}
|
||||
src = (u16*) ( (u8*) (src) + job->srcPitch );
|
||||
dst = (u16*) ( (u8*) (dst) + job->dstPitch );
|
||||
@ -627,7 +627,7 @@ static void executeBlit_TextureBlendColor_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_TextureBlendColor_32_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_TextureBlendColor_32_to_32( const SBlitJob * job )
|
||||
{
|
||||
u32 *src = (u32*) job->src;
|
||||
u32 *dst = (u32*) job->dst;
|
||||
@ -636,7 +636,7 @@ static void executeBlit_TextureBlendColor_32_to_32 ( const SBlitJob * job )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend32 ( dst[dx], PixelMul32_2 ( src[dx], job->argb ) );
|
||||
dst[dx] = PixelBlend32( dst[dx], PixelMul32_2( src[dx], job->argb ) );
|
||||
}
|
||||
src = (u32*) ( (u8*) (src) + job->srcPitch );
|
||||
dst = (u32*) ( (u8*) (dst) + job->dstPitch );
|
||||
@ -645,18 +645,18 @@ static void executeBlit_TextureBlendColor_32_to_32 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_Color_16_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_Color_16_to_16( const SBlitJob * job )
|
||||
{
|
||||
u16 *dst = (u16*) job->dst;
|
||||
|
||||
u16 c0 = video::A8R8G8B8toA1R5G5B5 ( job->argb );
|
||||
u16 c0 = video::A8R8G8B8toA1R5G5B5( job->argb );
|
||||
u32 c = c0 | c0 << 16;
|
||||
|
||||
if ( 0 == (job->srcPitch & 3 ) )
|
||||
{
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
memset32 ( dst, c, job->srcPitch );
|
||||
memset32( dst, c, job->srcPitch );
|
||||
dst = (u16*) ( (u8*) (dst) + job->dstPitch );
|
||||
}
|
||||
}
|
||||
@ -666,7 +666,7 @@ static void executeBlit_Color_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
memset32 ( dst, c, job->srcPitch );
|
||||
memset32( dst, c, job->srcPitch );
|
||||
dst[dx] = c0;
|
||||
dst = (u16*) ( (u8*) (dst) + job->dstPitch );
|
||||
}
|
||||
@ -676,31 +676,31 @@ static void executeBlit_Color_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_Color_32_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_Color_32_to_32( const SBlitJob * job )
|
||||
{
|
||||
u32 *dst = (u32*) job->dst;
|
||||
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
memset32 ( dst, job->argb, job->srcPitch );
|
||||
memset32( dst, job->argb, job->srcPitch );
|
||||
dst = (u32*) ( (u8*) (dst) + job->dstPitch );
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_ColorAlpha_16_to_16 ( const SBlitJob * job )
|
||||
static void executeBlit_ColorAlpha_16_to_16( const SBlitJob * job )
|
||||
{
|
||||
u16 *dst = (u16*) job->dst;
|
||||
|
||||
const u32 alpha = extractAlpha ( job->argb ) >> 3;
|
||||
const u32 src = video::A8R8G8B8toA1R5G5B5 ( job->argb );
|
||||
const u32 alpha = extractAlpha( job->argb ) >> 3;
|
||||
const u32 src = video::A8R8G8B8toA1R5G5B5( job->argb );
|
||||
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend16 ( dst[dx], src, alpha );
|
||||
dst[dx] = PixelBlend16( dst[dx], src, alpha );
|
||||
}
|
||||
dst = (u16*) ( (u8*) (dst) + job->dstPitch );
|
||||
}
|
||||
@ -708,18 +708,18 @@ static void executeBlit_ColorAlpha_16_to_16 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static void executeBlit_ColorAlpha_32_to_32 ( const SBlitJob * job )
|
||||
static void executeBlit_ColorAlpha_32_to_32( const SBlitJob * job )
|
||||
{
|
||||
u32 *dst = (u32*) job->dst;
|
||||
|
||||
const u32 alpha = extractAlpha ( job->argb );
|
||||
const u32 alpha = extractAlpha( job->argb );
|
||||
const u32 src = job->argb;
|
||||
|
||||
for ( s32 dy = 0; dy != job->height; ++dy )
|
||||
{
|
||||
for ( s32 dx = 0; dx != job->width; ++dx )
|
||||
{
|
||||
dst[dx] = PixelBlend32 ( dst[dx], src, alpha );
|
||||
dst[dx] = PixelBlend32( dst[dx], src, alpha );
|
||||
}
|
||||
dst = (u32*) ( (u8*) (dst) + job->dstPitch );
|
||||
}
|
||||
@ -727,16 +727,16 @@ static void executeBlit_ColorAlpha_32_to_32 ( const SBlitJob * job )
|
||||
|
||||
/*!
|
||||
*/
|
||||
static tExecuteBlit getBlitter ( eBlitter operation,const video::IImage * dest,const video::IImage * source )
|
||||
static tExecuteBlit getBlitter( eBlitter operation,const video::IImage * dest,const video::IImage * source )
|
||||
{
|
||||
video::ECOLOR_FORMAT sourceFormat = (video::ECOLOR_FORMAT) -1;
|
||||
video::ECOLOR_FORMAT destFormat = (video::ECOLOR_FORMAT) -1;
|
||||
|
||||
if ( source )
|
||||
sourceFormat = source->getColorFormat ();
|
||||
sourceFormat = source->getColorFormat();
|
||||
|
||||
if ( dest )
|
||||
destFormat = dest->getColorFormat ();
|
||||
destFormat = dest->getColorFormat();
|
||||
|
||||
switch ( operation )
|
||||
{
|
||||
@ -802,8 +802,8 @@ static tExecuteBlit getBlitter ( eBlitter operation,const video::IImage * dest,c
|
||||
}
|
||||
/*
|
||||
char buf[64];
|
||||
sprintf ( buf, "Blit: %d %d->%d unsupported",operation,sourceFormat,destFormat );
|
||||
os::Printer::log (buf );
|
||||
sprintf( buf, "Blit: %d %d->%d unsupported",operation,sourceFormat,destFormat );
|
||||
os::Printer::log(buf );
|
||||
*/
|
||||
return 0;
|
||||
|
||||
@ -814,16 +814,15 @@ static tExecuteBlit getBlitter ( eBlitter operation,const video::IImage * dest,c
|
||||
/*!
|
||||
a generic 2D Blitter
|
||||
*/
|
||||
static s32 Blit ( eBlitter operation,
|
||||
video::IImage * dest,
|
||||
const core::rect<s32> *destClipping,
|
||||
const core::position2d<s32> *destPos,
|
||||
video::IImage * const source,
|
||||
const core::rect<s32> *sourceClipping,
|
||||
u32 argb
|
||||
)
|
||||
static s32 Blit(eBlitter operation,
|
||||
video::IImage * dest,
|
||||
const core::rect<s32> *destClipping,
|
||||
const core::position2d<s32> *destPos,
|
||||
video::IImage * const source,
|
||||
const core::rect<s32> *sourceClipping,
|
||||
u32 argb)
|
||||
{
|
||||
tExecuteBlit blitter = getBlitter ( operation, dest, source );
|
||||
tExecuteBlit blitter = getBlitter( operation, dest, source );
|
||||
if ( 0 == blitter )
|
||||
{
|
||||
return 0;
|
||||
@ -871,8 +870,8 @@ static s32 Blit ( eBlitter operation,
|
||||
v.x1 = v.x0 + ( sourceClip.x1 - sourceClip.x0 );
|
||||
v.y1 = v.y0 + ( sourceClip.y1 - sourceClip.y0 );
|
||||
|
||||
intersect ( job.Dest, destClip, v );
|
||||
if ( !isValid ( job.Dest ) )
|
||||
intersect( job.Dest, destClip, v );
|
||||
if ( !isValid( job.Dest ) )
|
||||
return 0;
|
||||
|
||||
job.width = job.Dest.x1 - job.Dest.x0;
|
||||
@ -903,10 +902,10 @@ static s32 Blit ( eBlitter operation,
|
||||
job.dstPixelMul = dest->getBytesPerPixel();
|
||||
job.dst = (void*) ( (u8*) dest->lock() + ( job.Dest.y0 * job.dstPitch ) + ( job.Dest.x0 * job.dstPixelMul ) );
|
||||
|
||||
blitter ( &job );
|
||||
blitter( &job );
|
||||
|
||||
if ( source )
|
||||
source->unlock ();
|
||||
source->unlock();
|
||||
|
||||
if ( dest )
|
||||
dest->unlock();
|
||||
@ -981,7 +980,7 @@ CImage::CImage(IImage* imageToCopy, const core::position2d<s32>& pos,
|
||||
initData();
|
||||
|
||||
core::rect<s32> sClip( pos.X, pos.Y, pos.X + size.Width,pos.Y + size.Height );
|
||||
Blit ( BLITTER_TEXTURE, this, 0, 0, imageToCopy, &sClip,0 );
|
||||
Blit (BLITTER_TEXTURE, this, 0, 0, imageToCopy, &sClip, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1139,13 +1138,13 @@ void CImage::setPixel(u32 x, u32 y, const SColor &color )
|
||||
case ECF_A1R5G5B5:
|
||||
{
|
||||
u16 * dest = (u16*) ((u8*) Data + ( y * Pitch ) + ( x << 1 ));
|
||||
*dest = video::A8R8G8B8toA1R5G5B5 ( color.color );
|
||||
*dest = video::A8R8G8B8toA1R5G5B5( color.color );
|
||||
} break;
|
||||
|
||||
case ECF_R5G6B5:
|
||||
{
|
||||
u16 * dest = (u16*) ((u8*) Data + ( y * Pitch ) + ( x << 1 ));
|
||||
*dest = video::A8R8G8B8toR5G6B5 ( color.color );
|
||||
*dest = video::A8R8G8B8toR5G6B5( color.color );
|
||||
} break;
|
||||
|
||||
case ECF_R8G8B8:
|
||||
@ -1199,22 +1198,22 @@ ECOLOR_FORMAT CImage::getColorFormat() const
|
||||
//! draws a rectangle
|
||||
void CImage::drawRectangle(const core::rect<s32>& rect, const SColor &color)
|
||||
{
|
||||
Blit ( color.getAlpha() == 0xFF ? BLITTER_COLOR : BLITTER_COLOR_ALPHA,
|
||||
this, 0, &rect.UpperLeftCorner, 0, &rect, color.color );
|
||||
Blit(color.getAlpha() == 0xFF ? BLITTER_COLOR : BLITTER_COLOR_ALPHA,
|
||||
this, 0, &rect.UpperLeftCorner, 0, &rect, color.color);
|
||||
}
|
||||
|
||||
|
||||
//! copies this surface into another
|
||||
void CImage::copyTo(IImage* target, const core::position2d<s32>& pos)
|
||||
{
|
||||
Blit ( BLITTER_TEXTURE, target, 0, &pos, this, 0, 0 );
|
||||
Blit(BLITTER_TEXTURE, target, 0, &pos, this, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
//! copies this surface into another
|
||||
void CImage::copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect)
|
||||
{
|
||||
Blit ( BLITTER_TEXTURE, target, clipRect, &pos, this, &sourceRect, 0 );
|
||||
Blit(BLITTER_TEXTURE, target, clipRect, &pos, this, &sourceRect, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1223,8 +1222,8 @@ void CImage::copyTo(IImage* target, const core::position2d<s32>& pos, const core
|
||||
void CImage::copyToWithAlpha(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const SColor &color, const core::rect<s32>* clipRect)
|
||||
{
|
||||
// color blend only necessary on not full spectrum aka. color.color != 0xFFFFFFFF
|
||||
Blit ( color.color == 0xFFFFFFFF ? BLITTER_TEXTURE_ALPHA_BLEND: BLITTER_TEXTURE_ALPHA_COLOR_BLEND,
|
||||
target, clipRect, &pos, this, &sourceRect, color.color );
|
||||
Blit(color.color == 0xFFFFFFFF ? BLITTER_TEXTURE_ALPHA_BLEND: BLITTER_TEXTURE_ALPHA_COLOR_BLEND,
|
||||
target, clipRect, &pos, this, &sourceRect, color.color);
|
||||
}
|
||||
|
||||
|
||||
@ -1233,34 +1232,34 @@ void CImage::copyToWithAlpha(IImage* target, const core::position2d<s32>& pos, c
|
||||
void CImage::drawLine(const core::position2d<s32>& from, const core::position2d<s32>& to, const SColor &color)
|
||||
{
|
||||
AbsRectangle clip;
|
||||
GetClip ( clip, this );
|
||||
GetClip( clip, this );
|
||||
|
||||
core::position2d<s32> p[2];
|
||||
|
||||
if ( ClipLine ( clip, p[0], p[1], from, to ) )
|
||||
if ( ClipLine( clip, p[0], p[1], from, to ) )
|
||||
{
|
||||
u32 alpha = extractAlpha ( color.color );
|
||||
u32 alpha = extractAlpha( color.color );
|
||||
|
||||
switch ( Format )
|
||||
{
|
||||
case ECF_A1R5G5B5:
|
||||
if ( alpha == 256 )
|
||||
{
|
||||
RenderLine16_Decal ( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5 ( color.color ) );
|
||||
RenderLine16_Decal( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5( color.color ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
RenderLine16_Blend ( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5 ( color.color ), alpha >> 3 );
|
||||
RenderLine16_Blend( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5( color.color ), alpha >> 3 );
|
||||
}
|
||||
break;
|
||||
case ECF_A8R8G8B8:
|
||||
if ( alpha == 256 )
|
||||
{
|
||||
RenderLine32_Decal ( this, p[0], p[1], color.color );
|
||||
RenderLine32_Decal( this, p[0], p[1], color.color );
|
||||
}
|
||||
else
|
||||
{
|
||||
RenderLine32_Blend ( this, p[0], p[1], color.color, alpha );
|
||||
RenderLine32_Blend( this, p[0], p[1], color.color, alpha );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1352,8 +1351,8 @@ void CImage::copyToScalingBoxFilter(IImage* target, s32 bias)
|
||||
|
||||
target->lock();
|
||||
|
||||
s32 fx = core::ceil32 ( sourceXStep );
|
||||
s32 fy = core::ceil32 ( sourceYStep );
|
||||
s32 fx = core::ceil32( sourceXStep );
|
||||
s32 fy = core::ceil32( sourceYStep );
|
||||
f32 sx;
|
||||
f32 sy;
|
||||
|
||||
@ -1363,13 +1362,13 @@ void CImage::copyToScalingBoxFilter(IImage* target, s32 bias)
|
||||
sx = 0.f;
|
||||
for ( s32 x = 0; x != destSize.Width; ++x )
|
||||
{
|
||||
target->setPixel ( x, y, getPixelBox( core::floor32 ( sx ), core::floor32 ( sy ), fx, fy, bias ) );
|
||||
target->setPixel( x, y, getPixelBox( core::floor32( sx ), core::floor32( sy ), fx, fy, bias ) );
|
||||
sx += sourceXStep;
|
||||
}
|
||||
sy += sourceYStep;
|
||||
}
|
||||
|
||||
target->unlock ();
|
||||
target->unlock();
|
||||
}
|
||||
|
||||
|
||||
@ -1381,11 +1380,11 @@ void CImage::fill(const SColor &color)
|
||||
switch ( Format )
|
||||
{
|
||||
case ECF_A1R5G5B5:
|
||||
c = video::A8R8G8B8toA1R5G5B5 ( color.color );
|
||||
c = video::A8R8G8B8toA1R5G5B5( color.color );
|
||||
c |= c << 16;
|
||||
break;
|
||||
case ECF_R5G6B5:
|
||||
c = video::A8R8G8B8toR5G6B5 ( color.color );
|
||||
c = video::A8R8G8B8toR5G6B5( color.color );
|
||||
c |= c << 16;
|
||||
break;
|
||||
case ECF_A8R8G8B8:
|
||||
@ -1396,12 +1395,12 @@ void CImage::fill(const SColor &color)
|
||||
return;
|
||||
}
|
||||
|
||||
memset32 ( Data, c, getImageDataSizeInBytes () );
|
||||
memset32( Data, c, getImageDataSizeInBytes() );
|
||||
}
|
||||
|
||||
|
||||
//! get a filtered pixel
|
||||
inline SColor CImage::getPixelBox ( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) const
|
||||
inline SColor CImage::getPixelBox( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) const
|
||||
{
|
||||
SColor c;
|
||||
s32 a = 0, r = 0, g = 0, b = 0;
|
||||
@ -1410,9 +1409,9 @@ inline SColor CImage::getPixelBox ( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) con
|
||||
{
|
||||
for ( s32 dy = 0; dy != fy; ++dy )
|
||||
{
|
||||
c = getPixel ( x + dx , y + dy );
|
||||
c = getPixel( x + dx , y + dy );
|
||||
|
||||
a += c.getAlpha ();
|
||||
a += c.getAlpha();
|
||||
r += c.getRed();
|
||||
g += c.getGreen();
|
||||
b += c.getBlue();
|
||||
@ -1421,12 +1420,12 @@ inline SColor CImage::getPixelBox ( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) con
|
||||
|
||||
s32 sdiv = s32_log2_s32(fx * fy);
|
||||
|
||||
a = core::s32_clamp ( ( a >> sdiv ) + bias, 0, 255 );
|
||||
r = core::s32_clamp ( ( r >> sdiv ) + bias, 0, 255 );
|
||||
g = core::s32_clamp ( ( g >> sdiv ) + bias, 0, 255 );
|
||||
b = core::s32_clamp ( ( b >> sdiv ) + bias, 0, 255 );
|
||||
a = core::s32_clamp( ( a >> sdiv ) + bias, 0, 255 );
|
||||
r = core::s32_clamp( ( r >> sdiv ) + bias, 0, 255 );
|
||||
g = core::s32_clamp( ( g >> sdiv ) + bias, 0, 255 );
|
||||
b = core::s32_clamp( ( b >> sdiv ) + bias, 0, 255 );
|
||||
|
||||
c.set ( a, r, g, b );
|
||||
c.set( a, r, g, b );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
@ -84,44 +84,40 @@ public:
|
||||
//! returns the color format
|
||||
virtual ECOLOR_FORMAT getColorFormat() const;
|
||||
|
||||
//! draws a rectangle
|
||||
void drawRectangle(const core::rect<s32>& rect, const SColor &color);
|
||||
//! returns pitch of image
|
||||
virtual u32 getPitch() const { return Pitch; }
|
||||
|
||||
//! copies this surface into another, scaling it to fit.
|
||||
virtual void copyToScaling(void* target, s32 width, s32 height, ECOLOR_FORMAT format, u32 pitch=0);
|
||||
|
||||
//! copies this surface into another, scaling it to fit.
|
||||
virtual void copyToScaling(IImage* target);
|
||||
|
||||
//! copies this surface into another
|
||||
void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0));
|
||||
virtual void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0));
|
||||
|
||||
//! copies this surface into another
|
||||
void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0);
|
||||
virtual void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0);
|
||||
|
||||
//! copies this surface into another, using the alpha mask, an cliprect and a color to add with
|
||||
void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos,
|
||||
virtual void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos,
|
||||
const core::rect<s32>& sourceRect, const SColor &color,
|
||||
const core::rect<s32>* clipRect = 0);
|
||||
|
||||
//! copies this surface into another, scaling it to fit.
|
||||
void copyToScaling(void* target, s32 width, s32 height, ECOLOR_FORMAT format, u32 pitch=0);
|
||||
|
||||
//! copies this surface into another, scaling it to fit.
|
||||
void copyToScaling(IImage* target);
|
||||
|
||||
//! copies this surface into another, scaling it to fit, appyling a box filter
|
||||
void copyToScalingBoxFilter(IImage* target, s32 bias = 0);
|
||||
|
||||
//! fills the surface with black or white
|
||||
virtual void fill(const SColor &color);
|
||||
|
||||
//! draws a rectangle
|
||||
void drawRectangle(const core::rect<s32>& rect, const SColor &color);
|
||||
|
||||
//! draws a line from to
|
||||
void drawLine(const core::position2d<s32>& from, const core::position2d<s32>& to, const SColor &color);
|
||||
|
||||
//! fills the surface with black or white
|
||||
void fill(const SColor &color);
|
||||
|
||||
//! returns pitch of image
|
||||
virtual u32 getPitch() const
|
||||
{
|
||||
return Pitch;
|
||||
}
|
||||
|
||||
static u32 getBitsPerPixelFromFormat(ECOLOR_FORMAT format);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
//! assumes format and size has been set and creates the rest
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "IImageLoader.h"
|
||||
#include "IImageWriter.h"
|
||||
#include "IMaterialRenderer.h"
|
||||
#include "CMeshManipulator.h"
|
||||
|
||||
|
||||
namespace irr
|
||||
@ -68,7 +69,7 @@ IImageWriter* createImageWriterPPM();
|
||||
|
||||
//! constructor
|
||||
CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<s32>& screenSize)
|
||||
: FileSystem(io), ViewPort(0,0,0,0), ScreenSize(screenSize),
|
||||
: FileSystem(io), MeshManipulator(0), ViewPort(0,0,0,0), ScreenSize(screenSize),
|
||||
PrimitivesDrawn(0), TextureCreationFlags(0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
@ -82,6 +83,9 @@ CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<s32>& scre
|
||||
|
||||
ViewPort = core::rect<s32>(core::position2d<s32>(0,0), screenSize);
|
||||
|
||||
// create manipulator
|
||||
MeshManipulator = new scene::CMeshManipulator();
|
||||
|
||||
if (FileSystem)
|
||||
FileSystem->grab();
|
||||
|
||||
@ -139,23 +143,20 @@ CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<s32>& scre
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! destructor
|
||||
CNullDriver::~CNullDriver()
|
||||
{
|
||||
// drop file system
|
||||
if (FileSystem)
|
||||
FileSystem->drop();
|
||||
|
||||
// delete textures
|
||||
if (MeshManipulator)
|
||||
MeshManipulator->drop();
|
||||
deleteAllTextures();
|
||||
|
||||
// delete surface loader
|
||||
u32 i;
|
||||
for (i=0; i<SurfaceLoader.size(); ++i)
|
||||
SurfaceLoader[i]->drop();
|
||||
|
||||
// delete surface writer
|
||||
for (i=0; i<SurfaceWriter.size(); ++i)
|
||||
SurfaceWriter[i]->drop();
|
||||
|
||||
@ -1231,9 +1232,30 @@ IImage* CNullDriver::createImageFromData(ECOLOR_FORMAT format,
|
||||
}
|
||||
|
||||
|
||||
//! Creates an empty software image.
|
||||
IImage* CNullDriver::createImage(ECOLOR_FORMAT format, const core::dimension2d<s32>& size)
|
||||
{
|
||||
return new CImage(format, size);
|
||||
}
|
||||
|
||||
|
||||
//! Creates a software image from another image.
|
||||
IImage* CNullDriver::createImage(ECOLOR_FORMAT format, IImage *imageToCopy)
|
||||
{
|
||||
return new CImage(format, imageToCopy);
|
||||
}
|
||||
|
||||
|
||||
//! Creates a software image from part of another image.
|
||||
IImage* CNullDriver::createImage(IImage* imageToCopy, const core::position2d<s32>& pos, const core::dimension2d<s32>& size)
|
||||
{
|
||||
return new CImage(imageToCopy, pos, size);
|
||||
}
|
||||
|
||||
|
||||
//! Sets the fog mode.
|
||||
void CNullDriver::setFog(SColor color, bool linearFog, f32 start, f32 end, f32 density,
|
||||
bool pixelFog, bool rangeFog)
|
||||
void CNullDriver::setFog(SColor color, bool linearFog, f32 start, f32 end,
|
||||
f32 density, bool pixelFog, bool rangeFog)
|
||||
{
|
||||
FogColor = color;
|
||||
LinearFog = linearFog;
|
||||
@ -1790,6 +1812,14 @@ void CNullDriver::clearZBuffer()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//! Returns a pointer to the mesh manipulator.
|
||||
scene::IMeshManipulator* CNullDriver::getMeshManipulator()
|
||||
{
|
||||
return MeshManipulator;
|
||||
}
|
||||
|
||||
|
||||
//! Returns an image created from the last rendered frame.
|
||||
IImage* CNullDriver::createScreenShot()
|
||||
{
|
||||
|
@ -286,13 +286,24 @@ namespace video
|
||||
virtual IImage* createImageFromFile(io::IReadFile* file);
|
||||
|
||||
//! Creates a software image from a byte array.
|
||||
//! \param useForeignMemory: If true, the image will use the data pointer
|
||||
//! directly and own it from now on, which means it will also try to delete [] the
|
||||
//! data when the image will be destructed. If false, the memory will by copied.
|
||||
/** \param useForeignMemory: If true, the image will use the data pointer
|
||||
directly and own it from now on, which means it will also try to delete [] the
|
||||
data when the image will be destructed. If false, the memory will by copied. */
|
||||
virtual IImage* createImageFromData(ECOLOR_FORMAT format,
|
||||
const core::dimension2d<s32>& size, void *data,
|
||||
bool ownForeignMemory=true, bool deleteForeignMemory = true);
|
||||
|
||||
//! Creates an empty software image.
|
||||
virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<s32>& size);
|
||||
|
||||
|
||||
//! Creates a software image from another image.
|
||||
virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy);
|
||||
|
||||
//! Creates a software image from part of another image.
|
||||
virtual IImage* createImage(IImage* imageToCopy,
|
||||
const core::position2d<s32>& pos, const core::dimension2d<s32>& size);
|
||||
|
||||
//! Draws a mesh buffer
|
||||
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb);
|
||||
|
||||
@ -317,11 +328,8 @@ namespace video
|
||||
u32 ChangedID_Index;
|
||||
u32 LastUsed;
|
||||
scene::E_HARDWARE_MAPPING Mapped;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
//! Gets hardware buffer link from a meshbuffer (may create or update buffer)
|
||||
virtual SHWBufferLink *getBufferLink(const scene::IMeshBuffer* mb);
|
||||
|
||||
@ -350,8 +358,8 @@ namespace video
|
||||
virtual bool isHardwareBufferRecommend(const scene::IMeshBuffer* mb);
|
||||
|
||||
public:
|
||||
//! Only used by the internal engine. Used to notify the driver that
|
||||
//! the window was resized.
|
||||
//! Only used by the engine internally.
|
||||
/** Used to notify the driver that the window was resized. */
|
||||
virtual void OnResize(const core::dimension2d<s32>& size);
|
||||
|
||||
//! Adds a new material renderer to the video device.
|
||||
@ -442,6 +450,9 @@ namespace video
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData=0);
|
||||
|
||||
//! Returns a pointer to the mesh manipulator.
|
||||
virtual scene::IMeshManipulator* getMeshManipulator();
|
||||
|
||||
//! Clears the ZBuffer.
|
||||
virtual void clearZBuffer();
|
||||
|
||||
@ -570,6 +581,9 @@ namespace video
|
||||
|
||||
io::IFileSystem* FileSystem;
|
||||
|
||||
//! mesh manipulator
|
||||
scene::IMeshManipulator* MeshManipulator;
|
||||
|
||||
core::rect<s32> ViewPort;
|
||||
core::dimension2d<s32> ScreenSize;
|
||||
core::matrix4 TransformationMatrix;
|
||||
|
@ -44,9 +44,10 @@ const u16 COGRE_SUBMESH_OPERATION= 0x4010;
|
||||
const u16 COGRE_SUBMESH_BONE_ASSIGNMENT= 0x4100;
|
||||
const u16 COGRE_SUBMESH_TEXTURE_ALIAS= 0x4200;
|
||||
|
||||
|
||||
//! Constructor
|
||||
COgreMeshFileLoader::COgreMeshFileLoader(IMeshManipulator* manip,io::IFileSystem* fs, video::IVideoDriver* driver)
|
||||
: FileSystem(fs), Driver(driver), SwapEndian(false), Mesh(0), Manipulator(manip), NumUV(0)
|
||||
COgreMeshFileLoader::COgreMeshFileLoader(io::IFileSystem* fs, video::IVideoDriver* driver)
|
||||
: FileSystem(fs), Driver(driver), SwapEndian(false), Mesh(0), NumUV(0)
|
||||
{
|
||||
|
||||
#ifdef _DEBUG
|
||||
@ -61,7 +62,6 @@ COgreMeshFileLoader::COgreMeshFileLoader(IMeshManipulator* manip,io::IFileSystem
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! destructor
|
||||
COgreMeshFileLoader::~COgreMeshFileLoader()
|
||||
{
|
||||
@ -78,7 +78,6 @@ COgreMeshFileLoader::~COgreMeshFileLoader()
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! returns true if the file maybe is able to be loaded by this class
|
||||
//! based on the file extension (e.g. ".bsp")
|
||||
bool COgreMeshFileLoader::isALoadableFileExtension(const c8* filename) const
|
||||
@ -87,7 +86,6 @@ bool COgreMeshFileLoader::isALoadableFileExtension(const c8* filename) const
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! creates/loads an animated mesh from the file.
|
||||
//! \return Pointer to the created mesh. Returns 0 if loading failed.
|
||||
//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
||||
|
@ -27,7 +27,7 @@ class COgreMeshFileLoader : public IMeshLoader
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
COgreMeshFileLoader(IMeshManipulator* manip,io::IFileSystem* fs, video::IVideoDriver* driver);
|
||||
COgreMeshFileLoader(io::IFileSystem* fs, video::IVideoDriver* driver);
|
||||
|
||||
//! destructor
|
||||
virtual ~COgreMeshFileLoader();
|
||||
@ -230,7 +230,6 @@ private:
|
||||
core::array<OgreMaterial> Materials;
|
||||
|
||||
SMesh* Mesh;
|
||||
IMeshManipulator* Manipulator;
|
||||
u32 NumUV;
|
||||
};
|
||||
|
||||
|
@ -123,7 +123,6 @@
|
||||
#include "CDefaultSceneNodeFactory.h"
|
||||
|
||||
#include "CSceneCollisionManager.h"
|
||||
#include "CMeshManipulator.h"
|
||||
#include "CTriangleSelector.h"
|
||||
#include "COctTreeTriangleSelector.h"
|
||||
#include "CTriangleBBSelector.h"
|
||||
@ -157,7 +156,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
||||
gui::ICursorControl* cursorControl, IMeshCache* cache,
|
||||
gui::IGUIEnvironment* gui)
|
||||
: ISceneNode(0, 0), Driver(driver), FileSystem(fs), GUIEnvironment(gui),
|
||||
CursorControl(cursorControl), CollisionManager(0), MeshManipulator(0),
|
||||
CursorControl(cursorControl), CollisionManager(0),
|
||||
ActiveCamera(0), ShadowColor(150,0,0,0), AmbientLight(0,0,0,0),
|
||||
MeshCache(cache), CurrentRendertime(ESNRP_COUNT),
|
||||
IRR_XML_FORMAT_SCENE(L"irr_scene"), IRR_XML_FORMAT_NODE(L"node"), IRR_XML_FORMAT_NODE_ATTR_TYPE(L"type")
|
||||
@ -188,9 +187,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
||||
// create collision manager
|
||||
CollisionManager = new CSceneCollisionManager(this, Driver);
|
||||
|
||||
// create manipulator
|
||||
MeshManipulator = new CMeshManipulator();
|
||||
|
||||
// add file format loaders
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
|
||||
@ -230,7 +226,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
||||
MeshLoaderList.push_back(new CDMFLoader(this));
|
||||
#endif
|
||||
#ifdef _IRR_COMPILE_WITH_OGRE_LOADER_
|
||||
MeshLoaderList.push_back(new COgreMeshFileLoader(MeshManipulator, FileSystem, Driver));
|
||||
MeshLoaderList.push_back(new COgreMeshFileLoader(FileSystem, Driver));
|
||||
#endif
|
||||
#ifdef _IRR_COMPILE_WITH_OBJ_LOADER_
|
||||
MeshLoaderList.push_back(new COBJMeshFileLoader(this, FileSystem));
|
||||
@ -274,9 +270,6 @@ CSceneManager::~CSceneManager()
|
||||
if (CollisionManager)
|
||||
CollisionManager->drop();
|
||||
|
||||
if (MeshManipulator)
|
||||
MeshManipulator->drop();
|
||||
|
||||
if (GUIEnvironment)
|
||||
GUIEnvironment->drop();
|
||||
|
||||
@ -1464,7 +1457,6 @@ void CSceneManager::addExternalMeshLoader(IMeshLoader* externalLoader)
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! Returns a pointer to the scene collision manager.
|
||||
ISceneCollisionManager* CSceneManager::getSceneCollisionManager()
|
||||
{
|
||||
@ -1475,7 +1467,7 @@ ISceneCollisionManager* CSceneManager::getSceneCollisionManager()
|
||||
//! Returns a pointer to the mesh manipulator.
|
||||
IMeshManipulator* CSceneManager::getMeshManipulator()
|
||||
{
|
||||
return MeshManipulator;
|
||||
return Driver->getMeshManipulator();
|
||||
}
|
||||
|
||||
|
||||
|
@ -555,9 +555,6 @@ namespace scene
|
||||
//! collision manager
|
||||
ISceneCollisionManager* CollisionManager;
|
||||
|
||||
//! mesh manipulator
|
||||
IMeshManipulator* MeshManipulator;
|
||||
|
||||
//! render pass lists
|
||||
core::array<ISceneNode*> CameraList;
|
||||
core::array<DistanceNodeEntry> LightList;
|
||||
|
Loading…
x
Reference in New Issue
Block a user