mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 04:20:28 +00:00
(RGL) More cleanups, pt. 8
This commit is contained in:
parent
8d0fbe53ab
commit
f27e7e4943
@ -5,6 +5,7 @@ CELL_GPU_TYPE = RSX
|
||||
|
||||
DEBUG = 0
|
||||
STRIPPING_ENABLE = 1
|
||||
RGL_2D = 1
|
||||
|
||||
PC_DEVELOPMENT_IP_ADDRESS = "192.168.1.7"
|
||||
PC_DEVELOPMENT_UDP_PORT = 3490
|
||||
@ -54,6 +55,10 @@ else
|
||||
PPU_OPTIMIZE_LV := -O3
|
||||
endif
|
||||
|
||||
ifeq ($(RGL_2D), 1)
|
||||
PPU_OPTIMIZE_LV += -DHAVE_RGL_2D
|
||||
endif
|
||||
|
||||
PPU_CFLAGS = $(PPU_OPTIMIZE_LV) $(INCDIRS) $(DEFINES)
|
||||
PPU_CXXFLAGS = $(PPU_OPTIMIZE_LV) $(INCDIRS) $(DEFINES)
|
||||
|
||||
|
@ -13,14 +13,14 @@ typedef struct
|
||||
const char *s;
|
||||
} RGLenumMap;
|
||||
|
||||
const char *rglMapLookupEnum( const RGLenumMap* map, unsigned int count, GLenum e );
|
||||
GLenum rglMapLookupString( const RGLenumMap* map, unsigned int count, const char *s );
|
||||
const char *rglMapLookupEnum(const void *data, unsigned int count, GLenum e);
|
||||
GLenum rglMapLookupString(const void *data, unsigned int count, const char *s);
|
||||
|
||||
#define _RGL_MAP_LOOKUP_ENUM(MAP,ENUM) rglMapLookupEnum(MAP,sizeof(MAP)/sizeof(MAP[0]),ENUM)
|
||||
#define _RGL_MAP_LOOKUP_STRING(MAP,STRING) rglMapLookupString(MAP,sizeof(MAP)/sizeof(MAP[0]),STRING)
|
||||
|
||||
const char *rglGetGLEnumName( GLenum e );
|
||||
const char *rglGetGLErrorName( GLenum e );
|
||||
const char *rglGetGLEnumName(GLenum e);
|
||||
const char *rglGetGLErrorName(GLenum e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -91,20 +91,22 @@ extern "C" {
|
||||
RGL_EXPORT unsigned int rglCreateName (void *data, void* object);
|
||||
RGL_EXPORT unsigned int rglIsName( void *data, unsigned int name);
|
||||
RGL_EXPORT void rglEraseName (void *data, unsigned int name);
|
||||
static inline void * rglGetNamedValue( struct rglNameSpace* ns, unsigned int name )
|
||||
|
||||
static inline void *rglGetNamedValue(void *data, unsigned int name )
|
||||
{
|
||||
struct rglNameSpace *ns = (struct rglNameSpace*)data;
|
||||
return ns->data[name - 1];
|
||||
}
|
||||
|
||||
void rglTexNameSpaceInit( rglTexNameSpace *ns, rglTexNameSpaceCreateFunction create, rglTexNameSpaceDestroyFunction destroy );
|
||||
void rglTexNameSpaceFree( rglTexNameSpace *ns );
|
||||
void rglTexNameSpaceResetNames( rglTexNameSpace *ns );
|
||||
GLuint rglTexNameSpaceGetFree( rglTexNameSpace *ns );
|
||||
GLboolean rglTexNameSpaceCreateNameLazy( rglTexNameSpace *ns, GLuint name );
|
||||
GLboolean rglTexNameSpaceIsName( rglTexNameSpace *ns, GLuint name );
|
||||
void rglTexNameSpaceGenNames( rglTexNameSpace *ns, GLsizei n, GLuint *names );
|
||||
void rglTexNameSpaceDeleteNames( rglTexNameSpace *ns, GLsizei n, const GLuint *names );
|
||||
void rglTexNameSpaceReinit( rglTexNameSpace * saved, rglTexNameSpace * active );
|
||||
void rglTexNameSpaceInit(void *data, rglTexNameSpaceCreateFunction create, rglTexNameSpaceDestroyFunction destroy );
|
||||
void rglTexNameSpaceFree(void *data);
|
||||
void rglTexNameSpaceResetNames(void *data);
|
||||
GLuint rglTexNameSpaceGetFree(void *data);
|
||||
GLboolean rglTexNameSpaceCreateNameLazy(void *data, GLuint name );
|
||||
GLboolean rglTexNameSpaceIsName(void *data, GLuint name );
|
||||
void rglTexNameSpaceGenNames(void *data, GLsizei n, GLuint *names );
|
||||
void rglTexNameSpaceDeleteNames(void *data, GLsizei n, const GLuint *names );
|
||||
void rglTexNameSpaceReinit(void *saved, void *active);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -41,7 +41,7 @@ extern GLuint rglValidateStates( GLuint mask );
|
||||
void rglAttachContext( RGLdevice *device, RGLcontext* context );
|
||||
void rglDetachContext( RGLdevice *device, RGLcontext* context );
|
||||
void rglInvalidateAllStates (void *data);
|
||||
void rglResetAttributeState( rglAttributeState* as );
|
||||
void rglResetAttributeState(void *data);
|
||||
void rglSetFlipHandler(void (*handler)(const GLuint head), RGLdevice *device);
|
||||
void rglSetVBlankHandler(void (*handler)(const GLuint head), RGLdevice *device);
|
||||
|
||||
@ -104,7 +104,7 @@ GLboolean rglIsFormat( GLenum format );
|
||||
GLboolean rglIsValidPair( GLenum format, GLenum type );
|
||||
void rglImageAllocCPUStorage (void *data);
|
||||
void rglImageFreeCPUStorage (void *data);
|
||||
extern void rglSetImage( rglImage* image, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment, GLenum format, GLenum type, const GLvoid* pixels );
|
||||
extern void rglSetImage(void *data, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment, GLenum format, GLenum type, const GLvoid* pixels );
|
||||
extern void rglSetSubImage( GLenum target, GLint level, rglTexture *texture, rglImage* image, GLint x, GLint y, GLint z, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment, GLenum format, GLenum type, const GLvoid* pixels );
|
||||
extern int rglGetPixelSize( GLenum format, GLenum type );
|
||||
|
||||
|
@ -2,8 +2,10 @@
|
||||
#include "../../include/RGL/private.h"
|
||||
#include <string.h>
|
||||
|
||||
const char *rglMapLookupEnum( const RGLenumMap* map, unsigned int count, GLenum e )
|
||||
const char *rglMapLookupEnum(const void *data, unsigned int count, GLenum e )
|
||||
{
|
||||
const RGLenumMap *map = (const RGLenumMap*)data;
|
||||
|
||||
for (GLuint i = 0; i < count; ++i)
|
||||
if (map[i].e == e)
|
||||
return map[i].s;
|
||||
@ -11,8 +13,10 @@ const char *rglMapLookupEnum( const RGLenumMap* map, unsigned int count, GLenum
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GLenum rglMapLookupString( const RGLenumMap* map, unsigned int count, const char *s )
|
||||
GLenum rglMapLookupString(const void *data, unsigned int count, const char *s )
|
||||
{
|
||||
const RGLenumMap *map = (const RGLenumMap*)data;
|
||||
|
||||
if (s != NULL)
|
||||
for (GLuint i = 0;i < count;++i)
|
||||
if ( strcmp( map[i].s, s) == 0)
|
||||
|
@ -7,8 +7,10 @@
|
||||
static const unsigned int capacityIncr = 16;
|
||||
|
||||
// Initialize texture namespace ns with creation and destruction functions
|
||||
void rglTexNameSpaceInit( rglTexNameSpace *ns, rglTexNameSpaceCreateFunction create, rglTexNameSpaceDestroyFunction destroy )
|
||||
void rglTexNameSpaceInit(void *data, rglTexNameSpaceCreateFunction create, rglTexNameSpaceDestroyFunction destroy)
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
ns->capacity = capacityIncr;
|
||||
ns->data = (void **)malloc( ns->capacity * sizeof( void* ) );
|
||||
memset( ns->data, 0, ns->capacity*sizeof( void* ) );
|
||||
@ -17,18 +19,23 @@ void rglTexNameSpaceInit( rglTexNameSpace *ns, rglTexNameSpaceCreateFunction cre
|
||||
}
|
||||
|
||||
// Free texture namespace ns
|
||||
void rglTexNameSpaceFree( rglTexNameSpace *ns )
|
||||
void rglTexNameSpaceFree(void *data)
|
||||
{
|
||||
for ( GLuint i = 1;i < ns->capacity;++i )
|
||||
if ( ns->data[i] ) ns->destroy( ns->data[i] );
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
for (GLuint i = 1;i < ns->capacity; ++i)
|
||||
if (ns->data[i])
|
||||
ns->destroy( ns->data[i] );
|
||||
|
||||
free( ns->data );
|
||||
ns->data = NULL;
|
||||
}
|
||||
|
||||
// Reset all names in namespace ns to NULL
|
||||
void rglTexNameSpaceResetNames( rglTexNameSpace *ns )
|
||||
void rglTexNameSpaceResetNames(void *data)
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
for ( GLuint i = 1;i < ns->capacity;++i )
|
||||
{
|
||||
if ( ns->data[i] )
|
||||
@ -40,9 +47,11 @@ void rglTexNameSpaceResetNames( rglTexNameSpace *ns )
|
||||
}
|
||||
|
||||
// Get an index of the first free name in namespace ns
|
||||
GLuint rglTexNameSpaceGetFree( rglTexNameSpace *ns )
|
||||
GLuint rglTexNameSpaceGetFree(void *data)
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
GLuint i;
|
||||
|
||||
for (i = 1;i < ns->capacity;++i)
|
||||
if (!ns->data[i])
|
||||
break;
|
||||
@ -51,8 +60,10 @@ GLuint rglTexNameSpaceGetFree( rglTexNameSpace *ns )
|
||||
|
||||
// Add name to namespace by increasing capacity and calling creation call back function
|
||||
// Return GL_TRUE for success, GL_FALSE for failure
|
||||
GLboolean rglTexNameSpaceCreateNameLazy( rglTexNameSpace *ns, GLuint name )
|
||||
GLboolean rglTexNameSpaceCreateNameLazy(void *data, GLuint name )
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
if (name >= ns->capacity)
|
||||
{
|
||||
int newCapacity = name >= ns->capacity + capacityIncr ? name + 1 : ns->capacity + capacityIncr;
|
||||
@ -71,15 +82,20 @@ GLboolean rglTexNameSpaceCreateNameLazy( rglTexNameSpace *ns, GLuint name )
|
||||
|
||||
// Check if name is a valid name in namespace ns
|
||||
// Return GL_TRUE if so, GL_FALSE otherwise
|
||||
GLboolean rglTexNameSpaceIsName( rglTexNameSpace *ns, GLuint name )
|
||||
GLboolean rglTexNameSpaceIsName(void *data, GLuint name )
|
||||
{
|
||||
if (( name > 0 ) && ( name < ns->capacity ) ) return( ns->data[name] != 0 );
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
if ((name > 0) && (name < ns->capacity))
|
||||
return( ns->data[name] != 0 );
|
||||
else return GL_FALSE;
|
||||
}
|
||||
|
||||
// Generate new n names in namespace ns
|
||||
void rglTexNameSpaceGenNames( rglTexNameSpace *ns, GLsizei n, GLuint *names )
|
||||
void rglTexNameSpaceGenNames(void *data, GLsizei n, GLuint *names )
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
for ( int i = 0;i < n;++i )
|
||||
{
|
||||
GLuint name = rglTexNameSpaceGetFree( ns );
|
||||
@ -90,8 +106,10 @@ void rglTexNameSpaceGenNames( rglTexNameSpace *ns, GLsizei n, GLuint *names )
|
||||
}
|
||||
|
||||
// Delete n names from namespace ns
|
||||
void rglTexNameSpaceDeleteNames( rglTexNameSpace *ns, GLsizei n, const GLuint *names )
|
||||
void rglTexNameSpaceDeleteNames(void *data, GLsizei n, const GLuint *names )
|
||||
{
|
||||
rglTexNameSpace *ns = (rglTexNameSpace*)data;
|
||||
|
||||
for ( int i = 0;i < n;++i )
|
||||
{
|
||||
GLuint name = names[i];
|
||||
|
@ -201,14 +201,14 @@ int rglGcmGenerateProgram (void *data, int profileIndex, const CgProgramHeader *
|
||||
|
||||
CGprogram rglpCgUpdateProgramAtIndex( CGprogramGroup group, int index, int refcount )
|
||||
{
|
||||
if ( index < ( int )group->programCount )
|
||||
if (index < ( int )group->programCount)
|
||||
{
|
||||
//index can be < 0 , in that case refcount update on the group only, used when destroying a copied program
|
||||
if ( index >= 0 )
|
||||
if (index >= 0)
|
||||
{
|
||||
//if it has already been referenced duplicate instead of returning the same index, until the API offer a native support for
|
||||
//group of programs ( //fixed bug 13007 )
|
||||
if ( refcount == 1 && group->programs[index].refCount == 1 )
|
||||
if (refcount == 1 && group->programs[index].refCount == 1)
|
||||
{
|
||||
//it will handle the refcounting
|
||||
CGprogram res = cgCopyProgram( group->programs[index].program );
|
||||
@ -218,12 +218,10 @@ CGprogram rglpCgUpdateProgramAtIndex( CGprogramGroup group, int index, int refco
|
||||
}
|
||||
|
||||
group->refCount += refcount;
|
||||
if ( refcount < 0 )
|
||||
if (refcount < 0)
|
||||
{
|
||||
if ( group->refCount == 0 && !group->userCreated )
|
||||
{
|
||||
if (group->refCount == 0 && !group->userCreated)
|
||||
rglCgDestroyProgramGroup( group );
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
@ -236,7 +234,7 @@ CGprogram rglpCgUpdateProgramAtIndex( CGprogramGroup group, int index, int refco
|
||||
//add the group to the context:
|
||||
static void rglCgAddGroup( CGcontext ctx, CGprogramGroup group )
|
||||
{
|
||||
_CGcontext *context = _cgGetContextPtr( ctx );
|
||||
_CGcontext *context = _cgGetContextPtr(ctx);
|
||||
if ( !context->groupList )
|
||||
context->groupList = group;
|
||||
else
|
||||
|
@ -2166,7 +2166,7 @@ void rglPlatformChooseGPUFormatAndLayout(
|
||||
const rglTexture *texture = (const rglTexture*)data;
|
||||
rglImage *image = texture->image + texture->baseLevel;
|
||||
|
||||
#if 0
|
||||
#ifndef HAVE_RGL_2D
|
||||
GLuint levels = rglLog2( MAX( MAX( image->width, image->height ), image->depth ) ) + 1;
|
||||
levels = MIN( levels, texture->maxLevel + 1 );
|
||||
|
||||
@ -2512,7 +2512,7 @@ static inline void rglGcmUpdateGcmTexture (void *data_tex, void *data_layout, vo
|
||||
platformTexture->gcmTexture.pitch = layout->pitch;
|
||||
platformTexture->gcmTexture.mipmap = layout->levels;
|
||||
platformTexture->gcmTexture.cubemap = CELL_GCM_FALSE;
|
||||
#if 0
|
||||
#ifndef HAVE_RGL_2D
|
||||
// set dimension, swizzled implies P2 width/height/depth
|
||||
switch ( texture->target )
|
||||
{
|
||||
@ -2543,7 +2543,7 @@ void rglGcmUpdateMethods (void *data)
|
||||
// XXX make sure that REVALIDATE_PARAMETERS is set if the format of the texture changes
|
||||
// revalidate the texture registers cache just to ensure we are in the correct filtering mode
|
||||
// based on the internal format.
|
||||
#if 0
|
||||
#ifndef HAVE_RGL_2D
|
||||
switch ( layout->internalFormat )
|
||||
{
|
||||
case RGLGCM_FLOAT_R32:
|
||||
@ -2862,7 +2862,7 @@ GLboolean rglPlatformTextureReference (void *data, GLuint pitch, void *data_buf,
|
||||
if (rglIsDrawableColorFormat( newLayout.internalFormat))
|
||||
isRenderTarget = GL_TRUE;
|
||||
|
||||
#if 0
|
||||
#ifndef HAVE_RGL_2D
|
||||
switch (newLayout.internalFormat)
|
||||
{
|
||||
case GL_FLOAT_RGBA32:
|
||||
|
@ -52,8 +52,12 @@ static void rglFreeBufferObject (void *data)
|
||||
static void rglUnbindBufferObject (void *data, GLuint name)
|
||||
{
|
||||
RGLcontext *LContext = (RGLcontext*)data;
|
||||
if ( LContext->ArrayBuffer == name ) LContext->ArrayBuffer = 0;
|
||||
if ( LContext->PixelUnpackBuffer == name ) LContext->PixelUnpackBuffer = 0;
|
||||
|
||||
if (LContext->ArrayBuffer == name)
|
||||
LContext->ArrayBuffer = 0;
|
||||
if (LContext->PixelUnpackBuffer == name)
|
||||
LContext->PixelUnpackBuffer = 0;
|
||||
|
||||
for ( int i = 0;i < RGL_MAX_VERTEX_ATTRIBS;++i )
|
||||
{
|
||||
if ( LContext->attribs->attrib[i].arrayBuffer == name )
|
||||
@ -67,7 +71,9 @@ static void rglUnbindBufferObject (void *data, GLuint name)
|
||||
GLAPI void APIENTRY glBindBuffer( GLenum target, GLuint name )
|
||||
{
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
if ( name ) rglTexNameSpaceCreateNameLazy( &LContext->bufferObjectNameSpace, name );
|
||||
|
||||
if (name)
|
||||
rglTexNameSpaceCreateNameLazy( &LContext->bufferObjectNameSpace, name );
|
||||
|
||||
switch ( target )
|
||||
{
|
||||
@ -89,6 +95,7 @@ GLAPI GLvoid* APIENTRY glMapBuffer( GLenum target, GLenum access )
|
||||
{
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
GLuint name = 0;
|
||||
|
||||
switch ( target )
|
||||
{
|
||||
case GL_ARRAY_BUFFER:
|
||||
@ -106,7 +113,7 @@ GLAPI GLvoid* APIENTRY glMapBuffer( GLenum target, GLenum access )
|
||||
}
|
||||
rglBufferObject* bufferObject = (rglBufferObject*)LContext->bufferObjectNameSpace.data[name];
|
||||
|
||||
|
||||
#ifndef HAVE_RGL_2D
|
||||
switch ( access )
|
||||
{
|
||||
case GL_READ_ONLY:
|
||||
@ -117,6 +124,9 @@ GLAPI GLvoid* APIENTRY glMapBuffer( GLenum target, GLenum access )
|
||||
rglSetError( GL_INVALID_ENUM );
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
(void)0;
|
||||
#endif
|
||||
|
||||
bufferObject->mapped = GL_TRUE;
|
||||
void *result = rglPlatformBufferObjectMap( bufferObject, access );
|
||||
@ -124,12 +134,11 @@ GLAPI GLvoid* APIENTRY glMapBuffer( GLenum target, GLenum access )
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
GLAPI GLboolean APIENTRY glUnmapBuffer( GLenum target )
|
||||
{
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
GLuint name = 0;
|
||||
|
||||
switch ( target )
|
||||
{
|
||||
case GL_ARRAY_BUFFER:
|
||||
@ -154,9 +163,10 @@ GLAPI GLboolean APIENTRY glUnmapBuffer( GLenum target )
|
||||
GLAPI void APIENTRY glDeleteBuffers( GLsizei n, const GLuint *buffers )
|
||||
{
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
for ( int i = 0;i < n;++i )
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
if(!rglTexNameSpaceIsName( &LContext->bufferObjectNameSpace, buffers[i] ) ) continue;
|
||||
if(!rglTexNameSpaceIsName(&LContext->bufferObjectNameSpace, buffers[i]))
|
||||
continue;
|
||||
if (buffers[i])
|
||||
rglUnbindBufferObject( LContext, buffers[i] );
|
||||
}
|
||||
@ -174,6 +184,7 @@ GLAPI void APIENTRY glBufferData( GLenum target, GLsizeiptr size, const GLvoid *
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
|
||||
GLuint name = 0;
|
||||
|
||||
switch ( target )
|
||||
{
|
||||
case GL_ARRAY_BUFFER:
|
||||
@ -199,7 +210,9 @@ GLAPI void APIENTRY glBufferData( GLenum target, GLsizeiptr size, const GLvoid *
|
||||
bufferObject = (rglBufferObject*)LContext->bufferObjectNameSpace.data[name];
|
||||
}
|
||||
|
||||
if ( bufferObject->size > 0 ) rglPlatformDestroyBufferObject( bufferObject );
|
||||
if (bufferObject->size > 0)
|
||||
rglPlatformDestroyBufferObject( bufferObject );
|
||||
|
||||
bufferObject->size = size;
|
||||
bufferObject->width = 0;
|
||||
bufferObject->height = 0;
|
||||
@ -213,7 +226,8 @@ GLAPI void APIENTRY glBufferData( GLenum target, GLsizeiptr size, const GLvoid *
|
||||
rglSetError( GL_OUT_OF_MEMORY );
|
||||
return;
|
||||
}
|
||||
if ( data ) rglPlatformBufferObjectSetData( bufferObject, 0, size, data, GL_TRUE );
|
||||
if (data)
|
||||
rglPlatformBufferObjectSetData( bufferObject, 0, size, data, GL_TRUE );
|
||||
}
|
||||
}
|
||||
|
||||
@ -221,6 +235,7 @@ GLAPI void APIENTRY glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr
|
||||
{
|
||||
RGLcontext *LContext = _CurrentContext;
|
||||
GLuint name = 0;
|
||||
|
||||
switch ( target )
|
||||
{
|
||||
case GL_ARRAY_BUFFER:
|
||||
@ -272,7 +287,6 @@ GLAPI void APIENTRY glClear( GLbitfield mask )
|
||||
if ( LContext->needValidate & RGL_VALIDATE_FRAMEBUFFER )
|
||||
rglValidateFramebuffer();
|
||||
rglFBClear( mask );
|
||||
|
||||
}
|
||||
|
||||
GLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
|
||||
@ -339,8 +353,10 @@ void rglFramebufferGetAttachmentTexture(
|
||||
}
|
||||
}
|
||||
|
||||
rglFramebufferAttachment* rglFramebufferGetAttachment( rglFramebuffer *framebuffer, GLenum attachment )
|
||||
rglFramebufferAttachment* rglFramebufferGetAttachment(void *data, GLenum attachment)
|
||||
{
|
||||
rglFramebuffer *framebuffer = (rglFramebuffer*)data;
|
||||
|
||||
switch ( attachment )
|
||||
{
|
||||
case GL_COLOR_ATTACHMENT0_EXT:
|
||||
@ -364,7 +380,7 @@ void rglGetFramebufferSize( GLuint* width, GLuint* height )
|
||||
{
|
||||
rglFramebuffer* framebuffer = rglGetFramebuffer( LContext, LContext->framebuffer );
|
||||
|
||||
if ( rglPlatformFramebufferCheckStatus( framebuffer ) != GL_FRAMEBUFFER_COMPLETE_OES )
|
||||
if (rglPlatformFramebufferCheckStatus(framebuffer) != GL_FRAMEBUFFER_COMPLETE_OES)
|
||||
return;
|
||||
|
||||
for ( int i = 0; i < RGL_MAX_COLOR_ATTACHMENTS; ++i )
|
||||
@ -433,7 +449,7 @@ GLAPI GLenum APIENTRY glCheckFramebufferStatusOES( GLenum target )
|
||||
{
|
||||
RGLcontext* LContext = _CurrentContext;
|
||||
|
||||
if ( LContext->framebuffer )
|
||||
if (LContext->framebuffer)
|
||||
{
|
||||
rglFramebuffer* framebuffer = rglGetFramebuffer( LContext, LContext->framebuffer );
|
||||
|
||||
@ -448,22 +464,26 @@ GLAPI void APIENTRY glFramebufferTexture2DOES( GLenum target, GLenum attachment,
|
||||
RGLcontext* LContext = _CurrentContext;
|
||||
|
||||
rglFramebuffer* framebuffer = rglGetFramebuffer( LContext, LContext->framebuffer );
|
||||
|
||||
rglFramebufferAttachment* attach = rglFramebufferGetAttachment( framebuffer, attachment );
|
||||
if ( !attach ) return;
|
||||
|
||||
if (!attach)
|
||||
return;
|
||||
|
||||
rglTexture *textureObject = NULL;
|
||||
GLuint face;
|
||||
rglFramebufferGetAttachmentTexture( LContext, attach, &textureObject, &face );
|
||||
if ( textureObject ) textureObject->framebuffers.removeElement( framebuffer );
|
||||
|
||||
if ( texture )
|
||||
if (textureObject)
|
||||
textureObject->framebuffers.removeElement( framebuffer );
|
||||
|
||||
if (texture)
|
||||
{
|
||||
attach->type = RGL_FRAMEBUFFER_ATTACHMENT_TEXTURE;
|
||||
textureObject = rglGetTexture( LContext, texture );
|
||||
textureObject->framebuffers.pushBack( framebuffer );
|
||||
}
|
||||
else attach->type = RGL_FRAMEBUFFER_ATTACHMENT_NONE;
|
||||
else
|
||||
attach->type = RGL_FRAMEBUFFER_ATTACHMENT_NONE;
|
||||
attach->name = texture;
|
||||
attach->textureTarget = textarget;
|
||||
|
||||
@ -540,12 +560,27 @@ DECLARE_C_TYPES
|
||||
#undef DECLARE_TYPE
|
||||
|
||||
typedef GLfloat type_GL_FLOAT;
|
||||
static inline type_GL_FLOAT rglFloatTo_GL_FLOAT( float v ) {return v;}
|
||||
static inline float rglFloatFrom_GL_FLOAT( type_GL_FLOAT v ) {return v;}
|
||||
|
||||
typedef GLhalfARB type_GL_HALF_FLOAT_ARB;
|
||||
static inline type_GL_HALF_FLOAT_ARB rglFloatTo_GL_HALF_FLOAT_ARB( float x ) {return rglFloatToHalf( x );}
|
||||
static inline float rglFloatFrom_GL_HALF_FLOAT_ARB( type_GL_HALF_FLOAT_ARB x ) {return rglHalfToFloat( x );}
|
||||
|
||||
static inline type_GL_FLOAT rglFloatTo_GL_FLOAT(float v)
|
||||
{
|
||||
return v;
|
||||
}
|
||||
|
||||
static inline float rglFloatFrom_GL_FLOAT(type_GL_FLOAT v)
|
||||
{
|
||||
return v;
|
||||
}
|
||||
|
||||
static inline type_GL_HALF_FLOAT_ARB rglFloatTo_GL_HALF_FLOAT_ARB(float x)
|
||||
{
|
||||
return rglFloatToHalf(x);
|
||||
}
|
||||
|
||||
static inline float rglFloatFrom_GL_HALF_FLOAT_ARB(type_GL_HALF_FLOAT_ARB x)
|
||||
{
|
||||
return rglHalfToFloat(x);
|
||||
}
|
||||
|
||||
#define DECLARE_PACKED_TYPE_AND_REV_2(REALTYPE,S1,S2) \
|
||||
DECLARE_PACKED_TYPE(GL_##REALTYPE,GL_##REALTYPE##_##S1##_##S2,2,S1,S2,0,0,) \
|
||||
@ -643,38 +678,34 @@ void rglRawRasterToImage(const void *in_data,
|
||||
|
||||
const GLuint size = pixelBits / 8;
|
||||
|
||||
if ( raster->xstride == image->xstride &&
|
||||
raster->ystride == image->ystride &&
|
||||
raster->zstride == image->zstride )
|
||||
{
|
||||
if ( raster->xstride == image->xstride &&
|
||||
raster->ystride == image->ystride &&
|
||||
raster->zstride == image->zstride )
|
||||
{
|
||||
memcpy(
|
||||
( char * )image->data +
|
||||
x*image->xstride + y*image->ystride + z*image->zstride,
|
||||
raster->data,
|
||||
raster->depth*raster->zstride );
|
||||
memcpy((char*)image->data +
|
||||
x*image->xstride + y*image->ystride + z*image->zstride,
|
||||
raster->data, raster->depth*raster->zstride );
|
||||
|
||||
return;
|
||||
}
|
||||
else if ( raster->xstride == image->xstride )
|
||||
return;
|
||||
}
|
||||
else if ( raster->xstride == image->xstride )
|
||||
{
|
||||
const GLuint lineBytes = raster->width * raster->xstride;
|
||||
for ( int i = 0; i < raster->depth; ++i )
|
||||
{
|
||||
const GLuint lineBytes = raster->width * raster->xstride;
|
||||
for ( int i = 0; i < raster->depth; ++i )
|
||||
for ( int j = 0; j < raster->height; ++j )
|
||||
{
|
||||
for ( int j = 0; j < raster->height; ++j )
|
||||
{
|
||||
const char *src = ( const char * )raster->data +
|
||||
i * raster->zstride + j * raster->ystride;
|
||||
char *dst = ( char * )image->data +
|
||||
( i + z ) * image->zstride +
|
||||
( j + y ) * image->ystride +
|
||||
x * image->xstride;
|
||||
memcpy( dst, src, lineBytes );
|
||||
}
|
||||
const char *src = ( const char * )raster->data +
|
||||
i * raster->zstride + j * raster->ystride;
|
||||
char *dst = ( char * )image->data +
|
||||
( i + z ) * image->zstride +
|
||||
( j + y ) * image->ystride +
|
||||
x * image->xstride;
|
||||
memcpy( dst, src, lineBytes );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for ( int i = 0; i < raster->depth; ++i )
|
||||
@ -717,6 +748,7 @@ void rglImageAllocCPUStorage (void *data)
|
||||
void rglImageFreeCPUStorage(void *data)
|
||||
{
|
||||
rglImage *image = (rglImage*)data;
|
||||
|
||||
if (!image->mallocData)
|
||||
return;
|
||||
|
||||
@ -727,8 +759,10 @@ void rglImageFreeCPUStorage(void *data)
|
||||
image->dataState &= ~RGL_IMAGE_DATASTATE_HOST;
|
||||
}
|
||||
|
||||
static inline void rglSetImageTexRef( rglImage *image, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment)
|
||||
static inline void rglSetImageTexRef(void *data, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment)
|
||||
{
|
||||
rglImage *image = (rglImage*)data;
|
||||
|
||||
image->width = width;
|
||||
image->height = height;
|
||||
image->depth = depth;
|
||||
@ -753,20 +787,20 @@ static inline void rglSetImageTexRef( rglImage *image, GLint internalFormat, GLs
|
||||
|
||||
image->isSet = GL_TRUE;
|
||||
|
||||
{
|
||||
if ( image->xstride == 0 )
|
||||
image->xstride = rglGetPixelSize( image->format, image->type );
|
||||
if ( image->ystride == 0 )
|
||||
image->ystride = image->width * image->xstride;
|
||||
if ( image->zstride == 0 )
|
||||
image->zstride = image->height * image->ystride;
|
||||
}
|
||||
if ( image->xstride == 0 )
|
||||
image->xstride = rglGetPixelSize( image->format, image->type );
|
||||
if ( image->ystride == 0 )
|
||||
image->ystride = image->width * image->xstride;
|
||||
if ( image->zstride == 0 )
|
||||
image->zstride = image->height * image->ystride;
|
||||
|
||||
image->dataState = RGL_IMAGE_DATASTATE_UNSET;
|
||||
}
|
||||
|
||||
void rglSetImage( rglImage *image, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment, GLenum format, GLenum type, const GLvoid *pixels )
|
||||
void rglSetImage(void *data, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei alignment, GLenum format, GLenum type, const void *pixels )
|
||||
{
|
||||
rglImage *image = (rglImage*)data;
|
||||
|
||||
image->width = width;
|
||||
image->height = height;
|
||||
image->depth = depth;
|
||||
@ -800,7 +834,7 @@ void rglSetImage( rglImage *image, GLint internalFormat, GLsizei width, GLsizei
|
||||
image->zstride = image->height * image->ystride;
|
||||
}
|
||||
|
||||
if ( pixels )
|
||||
if (pixels)
|
||||
{
|
||||
rglImageAllocCPUStorage( image );
|
||||
if ( !image->data )
|
||||
@ -812,10 +846,10 @@ void rglSetImage( rglImage *image, GLint internalFormat, GLsizei width, GLsizei
|
||||
raster.width = width;
|
||||
raster.height = height;
|
||||
raster.depth = depth;
|
||||
raster.data = ( void * )pixels;
|
||||
raster.data = (void*)pixels;
|
||||
|
||||
raster.xstride = rglGetPixelSize( raster.format, raster.type );
|
||||
raster.ystride = ( raster.width * raster.xstride + alignment - 1 ) / alignment * alignment;
|
||||
raster.ystride = (raster.width * raster.xstride + alignment - 1) / alignment * alignment;
|
||||
raster.zstride = raster.height * raster.ystride;
|
||||
|
||||
rglRawRasterToImage( &raster, image, 0, 0, 0 );
|
||||
@ -837,7 +871,6 @@ static char* rglExtensionsString = "";
|
||||
static char* rglVersionNumber = "2.00";
|
||||
char* rglVersion = "2.00";
|
||||
|
||||
|
||||
RGLcontext* _CurrentContext = NULL;
|
||||
|
||||
RGL_EXPORT RGLcontextHookFunction rglContextCreateHook = NULL;
|
||||
@ -895,13 +928,13 @@ GLuint rglValidateStates (GLuint mask)
|
||||
|
||||
GLuint needValidate = LContext->needValidate;
|
||||
|
||||
if ( RGL_UNLIKELY( needValidate & RGL_VALIDATE_FRAMEBUFFER ) )
|
||||
if (RGL_UNLIKELY( needValidate & RGL_VALIDATE_FRAMEBUFFER))
|
||||
{
|
||||
rglValidateFramebuffer();
|
||||
needValidate = LContext->needValidate;
|
||||
}
|
||||
|
||||
if ( RGL_UNLIKELY( needValidate & RGL_VALIDATE_TEXTURES_USED ) )
|
||||
if (RGL_UNLIKELY( needValidate & RGL_VALIDATE_TEXTURES_USED))
|
||||
{
|
||||
long unitInUseCount = LContext->BoundFragmentProgram->samplerCount;
|
||||
const GLuint* unitsInUse = LContext->BoundFragmentProgram->samplerUnits;
|
||||
@ -910,22 +943,22 @@ GLuint rglValidateStates (GLuint mask)
|
||||
long unit = unitsInUse[i];
|
||||
rglTexture* texture = LContext->TextureImageUnits[unit].currentTexture;
|
||||
|
||||
if ( texture )
|
||||
if (texture)
|
||||
rglPlatformValidateTextureStage( unit, texture );
|
||||
}
|
||||
}
|
||||
|
||||
if ( RGL_UNLIKELY( needValidate & RGL_VALIDATE_VERTEX_PROGRAM ) )
|
||||
if (RGL_UNLIKELY(needValidate & RGL_VALIDATE_VERTEX_PROGRAM))
|
||||
{
|
||||
rglValidateVertexProgram();
|
||||
}
|
||||
|
||||
if ( RGL_LIKELY( needValidate & RGL_VALIDATE_VERTEX_CONSTANTS ) )
|
||||
if (RGL_LIKELY(needValidate & RGL_VALIDATE_VERTEX_CONSTANTS))
|
||||
{
|
||||
rglValidateVertexConstants();
|
||||
}
|
||||
|
||||
if ( RGL_UNLIKELY( needValidate & RGL_VALIDATE_FRAGMENT_PROGRAM ) )
|
||||
if (RGL_UNLIKELY(needValidate & RGL_VALIDATE_FRAGMENT_PROGRAM))
|
||||
{
|
||||
rglValidateFragmentProgram();
|
||||
}
|
||||
@ -952,8 +985,10 @@ GLuint rglValidateStates (GLuint mask)
|
||||
return dirty;
|
||||
}
|
||||
|
||||
void rglResetAttributeState( rglAttributeState* as )
|
||||
void rglResetAttributeState(void *data)
|
||||
{
|
||||
rglAttributeState *as = (rglAttributeState*)data;
|
||||
|
||||
for ( int i = 0; i < RGL_MAX_VERTEX_ATTRIBS; ++i )
|
||||
{
|
||||
as->attrib[i].clientSize = 4;
|
||||
@ -1074,12 +1109,12 @@ static void rglResetContext (void *data)
|
||||
|
||||
RGLcontext* psglCreateContext(void)
|
||||
{
|
||||
RGLcontext* LContext = ( RGLcontext* )malloc( sizeof( RGLcontext ) );
|
||||
RGLcontext* LContext = (RGLcontext*)malloc(sizeof(RGLcontext));
|
||||
|
||||
if (!LContext)
|
||||
return NULL;
|
||||
|
||||
memset( LContext, 0, sizeof( RGLcontext ) );
|
||||
memset(LContext, 0, sizeof(RGLcontext));
|
||||
|
||||
LContext->error = GL_NO_ERROR;
|
||||
|
||||
@ -1424,15 +1459,18 @@ void rglTextureUnbind (void *data, GLuint name )
|
||||
GLboolean rglTextureIsValid (const void *data)
|
||||
{
|
||||
const rglTexture *texture = (const rglTexture*)data;
|
||||
if ( texture->imageCount < 1 + texture->baseLevel )
|
||||
|
||||
if (texture->imageCount < 1 + texture->baseLevel)
|
||||
return GL_FALSE;
|
||||
if ( !texture->image )
|
||||
return GL_FALSE;
|
||||
|
||||
const rglImage* image = texture->image + texture->baseLevel;
|
||||
|
||||
GLenum format = image->format;
|
||||
GLenum type = image->type;
|
||||
GLenum internalFormat = image->internalFormat;
|
||||
|
||||
if (( texture->vertexEnable ) && ( internalFormat != GL_FLOAT_RGBA32 )
|
||||
&& ( internalFormat != GL_RGBA32F_ARB ))
|
||||
return GL_FALSE;
|
||||
@ -1551,7 +1589,7 @@ void rglBindTextureInternal (void *data, GLuint name, GLenum target )
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
#ifndef HAVE_RGL_2D
|
||||
switch ( target )
|
||||
{
|
||||
case GL_TEXTURE_2D:
|
||||
@ -1843,7 +1881,7 @@ void rglVertexAttrib1fNV (GLuint index, GLfloat x)
|
||||
RGLBIT_TRUE( LContext->attribs->DirtyMask, index );
|
||||
}
|
||||
|
||||
void rglVertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y )
|
||||
void rglVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y)
|
||||
{
|
||||
RGLcontext* LContext = _CurrentContext;
|
||||
|
||||
@ -2014,6 +2052,8 @@ RGLdevice *psglGetCurrentDevice (void)
|
||||
|
||||
GLAPI void RGL_EXPORT psglSwap (void)
|
||||
{
|
||||
#ifndef HAVE_RGL_2D
|
||||
if ( _CurrentDevice != NULL)
|
||||
#endif
|
||||
rglPlatformSwapBuffers( _CurrentDevice );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user