CoronaExternalTextureCallbacks

修订 版本 2024.3703
关键词 iOS,Solar2D Native,C,CoronaGraphics.h,CoronaExternalTextureCallbacks
另请参阅 CoronaGraphics.h
Corona C 函数

概述

此结构包含提供纹理信息和在事件发生或 Corona 请求纹理信息时要调用的回调的字段。纹理由 Corona 管理,插件无法控制何时释放纹理。因此,必须根据请求提供有关纹理位图的信息。

注意

始终使用零初始化此结构的实例。某些字段是可选的,即使它们是 NULL 也可以创建纹理。但是,其他字段是必需的,如果它们不存在,则不会推送纹理。

CoronaExternalTextureCallbacks callbacks;
memset(&callbacks, 0, sizeof(CoronaExternalTextureCallbacks));
callbacks.size = sizeof(CoronaExternalTextureCallbacks);

语法

typedef struct CoronaExternalTextureCallbacks
{
    unsigned long size;
    unsigned int (*getWidth)(void* userData);
    unsigned int (*getHeight)(void* userData);
    const void* (*onRequestBitmap)(void* userData);
    void (*onReleaseBitmap)(void* userData);
    CoronaExternalBitmapFormat (*getFormat)(void* userData);
    void (*onFinalize)(void *userData);
    int (*onGetField)(lua_State *L, const char *field, void* userData);
} CoronaExternalTextureCallbacks;
size (必需)

创建此类型的实例时,将此成员设置为 CoronaExternalTextureCallbacks 类型的字节数。此字段用于标识 API 版本。

size = sizeof(CoronaExternalTextureCallbacks);
getWidth (必需)

当 Corona 请求插件提供位图的像素宽度时将调用的回调。此回调接收创建纹理资源时传递的 userData 指针。请注意,某些位图格式(例如8 位掩码)要求宽度是 4 字节的倍数。

getHeight (必需)

当 Corona 请求插件提供位图的像素高度时将调用的回调。此回调接收创建纹理资源时传递的 userData 指针。

onRequestBitmap (必需)

当 Corona 的渲染系统请求位图的像素数组时,Corona 将调用此回调。此函数调用之后将始终调用 onReleaseBitmap 回调。此回调接收创建纹理资源时传递的 userData 指针。

备注
  • 此函数必须返回一个指向包含位图信息的 данных 的有效指针。Corona 期望位图数据是逐行的像素数组,从图像的左上角开始,每个像素由bpp = CoronaExternalFormatBPP(getFormat())字节表示。每个颜色通道使用 1 个字节,并且顺序与格式名称相同,从左到右。因此,使用 RGBA 格式,R 索引为 0

  • 内存的总大小必须至少为……

unsigned int bitmapSizeInBytes = getWidth() * getHeight() * bytesPerPixel;
  • 访问位图的最左侧值可以写成……
void* byteArray = onRequestBitmap();
int bytesPerPixel = CoronaExternalFormatBPP(getFormat());
int red = (int)byteArray[((Y * getWidth()) + X) * bytesPerPixel];
  • 请记住,默认格式 RGBA 使用预乘 alpha。
onReleaseBitmap (可选)

Corona 将调用此回调,以通知插件不再需要纹理位图的数据,这意味着插件可以从内存中删除位图数据。调用此回调后,onRequestBitmap 回调先前返回的指针将不再有效。此回调接收创建纹理资源时传递的 userData 指针。

getFormat (可选)

当请求位图的像素格式时,Corona 将调用此回调。此回调接收创建纹理资源时传递的 userData 指针。这必须返回一个 CoronaExternalBitmapFormat 枚举常量,例如 kExternalBitmapFormat_RGBA

onFinalize (可选)

当 Lua TextureResourceExternal 对象即将被销毁时,Corona 将调用此回调。调用此回调后,将无法访问任何回调或返回的位图指针。本质上,这会释放与此纹理资源关联的所有对象和资源。此回调接收创建纹理资源时传递的 userData 指针。

onGetField (可选)

从 Lua TextureResourceExternal 对象访问未知 Lua 属性时要调用的回调。这是插件从 Lua 对象提供自定义只读字段的机会。参数 field 提供从 TextureResourceExternal 对象访问的属性的名称。参数 userData 是创建纹理资源时传递的指针。此函数返回推送到 Lua 堆栈上的值的个数。