我正在使用Unity的渲染插件示例。
Unity调用插件并交给它一个纹理指针,这是一个OpenGL纹理名称(SetTextureFromUnity函数供参考)。我有另一种纹理,我在我的插件中创建和管理。我想以某种方式获得Unity的纹理参考来使用我的纹理而不是它给我的纹理。
是否可以使Unity纹理指向我的纹理?我是低级OpenGL的超级粗糙。
或者:是否可以从已存在的openGL纹理创建Texture2D?然后我可以创建自己的纹理并将其交回到Unity以包裹Texture2D。
我知道我可以将纹理中的数据复制到Unity纹理,但是当两者的数据已经存在于GPU上时,这非常缓慢且效率低下。我正在研究FBO副本,但是当我只想指针A指向指针B指向的同一个东西(理论上是任何方式)时,所有这些看起来都有点过头了......
答案 0 :(得分:0)
#define SIZE 1024
#define MASK (SIZE - 1)
struct texture
{
my_image_object *image;
};
struct texture table[SIZE];
void
bind_my_image_object(my_image_object *image)
{
uintmax_t hash;
size_t index;
hash = my_pointer_hash_function((uintptr_t)image);
index = hash & MASK;
texture = table + index;
glBindTexture(GL_TEXTURE_2D, index);
if (texture->image != image)
{
your_texture_upload_routine(image);
texture->image = image;
}
}
使用合适的哈希函数。向下移动指针值以避免考虑哈希函数中的典型对象对齐。例如:64位PC上的(uintptr_t)image >> 3
。并使用足够大的桌子,这样你就不会在每一帧都丢弃你的纹理。还要使用功率为2的表格大小,以便hash & MASK
正确包装。
通用哈希表建议适用。您的哈希表可能会有所不同。