mirror of
https://github.com/pspdev/pspsdk.git
synced 2025-10-04 09:08:30 +00:00
Add getStaticVramBuffer getStaticVramTexture
This commit is contained in:
@@ -31,5 +31,5 @@ libpspgu_a_SOURCES = callbackFin.c callbackSig.c guInternal.c resetValues.c sceG
|
|||||||
sceGuSignal.c sceGuSpecular.c sceGuStart.c sceGuStencilFunc.c sceGuStencilOp.c \
|
sceGuSignal.c sceGuSpecular.c sceGuStart.c sceGuStencilFunc.c sceGuStencilOp.c \
|
||||||
sceGuSwapBuffers.c sceGuSync.c sceGuTerm.c sceGuTexEnvColor.c sceGuTexFilter.c sceGuTexFlush.c sceGuTexFunc.c \
|
sceGuSwapBuffers.c sceGuSync.c sceGuTerm.c sceGuTexEnvColor.c sceGuTexFilter.c sceGuTexFlush.c sceGuTexFunc.c \
|
||||||
sceGuTexImage.c sceGuTexLevelMode.c sceGuTexMapMode.c sceGuTexMode.c sceGuTexOffset.c sceGuTexProjMapMode.c \
|
sceGuTexImage.c sceGuTexLevelMode.c sceGuTexMapMode.c sceGuTexMode.c sceGuTexOffset.c sceGuTexProjMapMode.c \
|
||||||
sceGuTexScale.c sceGuTexSlope.c sceGuTexSync.c sceGuTexWrap.c sceGuViewport.c
|
sceGuTexScale.c sceGuTexSlope.c sceGuTexSync.c sceGuTexWrap.c sceGuViewport.c vram.c
|
||||||
|
|
||||||
|
@@ -1501,6 +1501,42 @@ void guSwapBuffersBehaviour(int behaviour);
|
|||||||
**/
|
**/
|
||||||
void guSwapBuffersCallback(GuSwapBuffersCallback callback);
|
void guSwapBuffersCallback(GuSwapBuffersCallback callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate a draw buffer in vram
|
||||||
|
*
|
||||||
|
* Available pixel formats are:
|
||||||
|
* - GU_PSM_5650 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_5551 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_4444 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_8888 - Truecolor, 32-bit
|
||||||
|
*
|
||||||
|
* @param width - Width of the buffer, usually 512 (must be a power of 2)
|
||||||
|
* @param height - Height of the buffer, normally the height of the screen 272 (must be a power of 2)
|
||||||
|
* @param psm - Which pixel format to use
|
||||||
|
*
|
||||||
|
* @return A pointer to the buffer's relative to vram start (as required by sceGuDispBuffer, sceGuDrawBuffer, sceGuDepthBuffer and sceGuDrawBufferList)
|
||||||
|
**/
|
||||||
|
void* getStaticVramBuffer(unsigned int width, unsigned int height, unsigned int psm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate a texture buffer in vram
|
||||||
|
*
|
||||||
|
* Available texture-formats are:
|
||||||
|
* - GU_PSM_5650 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_5551 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_4444 - Hicolor, 16-bit
|
||||||
|
* - GU_PSM_8888 - Truecolor, 32-bit
|
||||||
|
* - GU_PSM_T4 - Indexed, 4-bit (2 pixels per byte)
|
||||||
|
* - GU_PSM_T8 - Indexed, 8-bit
|
||||||
|
*
|
||||||
|
* @param width - Width of the buffer (must be a power of 2)
|
||||||
|
* @param height - Height of the buffer (must be a power of 2)
|
||||||
|
* @param psm - Which pixel format to use
|
||||||
|
*
|
||||||
|
* @return A pointer to the buffer
|
||||||
|
**/
|
||||||
|
void* getStaticVramTexture(unsigned int width, unsigned int height, unsigned int psm);
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
52
src/gu/vram.c
Normal file
52
src/gu/vram.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* PSP Software Development Kit - https://github.com/pspdev
|
||||||
|
* -----------------------------------------------------------------------
|
||||||
|
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Dan Peori
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pspge.h>
|
||||||
|
#include <pspgu.h>
|
||||||
|
|
||||||
|
static unsigned int staticOffset = 0;
|
||||||
|
|
||||||
|
static unsigned int getMemorySize(unsigned int width, unsigned int height, unsigned int psm)
|
||||||
|
{
|
||||||
|
switch (psm)
|
||||||
|
{
|
||||||
|
case GU_PSM_T4:
|
||||||
|
return (width * height) >> 1;
|
||||||
|
|
||||||
|
case GU_PSM_T8:
|
||||||
|
return width * height;
|
||||||
|
|
||||||
|
case GU_PSM_5650:
|
||||||
|
case GU_PSM_5551:
|
||||||
|
case GU_PSM_4444:
|
||||||
|
case GU_PSM_T16:
|
||||||
|
return 2 * width * height;
|
||||||
|
|
||||||
|
case GU_PSM_8888:
|
||||||
|
case GU_PSM_T32:
|
||||||
|
return 4 * width * height;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void* getStaticVramBuffer(unsigned int width, unsigned int height, unsigned int psm)
|
||||||
|
{
|
||||||
|
unsigned int memSize = getMemorySize(width,height,psm);
|
||||||
|
void* result = (void*)staticOffset;
|
||||||
|
staticOffset += memSize;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* getStaticVramTexture(unsigned int width, unsigned int height, unsigned int psm)
|
||||||
|
{
|
||||||
|
void* result = getStaticVramBuffer(width,height,psm);
|
||||||
|
return (void*)(((unsigned int)result) + ((unsigned int)sceGeEdramGetAddr()));
|
||||||
|
}
|
Reference in New Issue
Block a user