gpt4 book ai didi

plugins - 可以更改 OpenGL 纹理名称吗?

转载 作者:行者123 更新时间:2023-12-02 04:51:49 25 4
gpt4 key购买 nike

我正在使用 Unity 的渲染插件示例。

Unity 调用插件并传递给它一个纹理指针,它是一个 OpenGL 纹理名称(供引用的 SetTextureFromUnity 函数)。我在我的插件中创建和管理了另一个纹理。我想以某种方式让 Unity 的纹理引用使用我的纹理,而不是它交给我的纹理。

是否可以让 Unity 纹理只指向我的纹理?我对低级 OpenGL super 粗暴。

或者:是否可以从已经存在的 openGL 纹理创建 Texture2D?然后我可以创建自己的纹理并将其交还给 unity 以使用 Texture2D 进行包装。

我知道我可以将数据从我的纹理复制到 Unity 纹理,但是当两者的数据已经在 GPU 上时,这会非常慢且效率低下。我正在研究 FBO 副本,但是当我只想让指针 A 指向指针 B 所指向的同一事物(理论上无论如何)时,所有这些似乎都有些矫枉过正......

最佳答案

#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;
}
}

使用合适的散列函数。向下移动指针值以避免考虑散列函数中的典型对象对齐。例如:(uintptr_t)image >> 3 在 64 位 PC 上。并使用足够大的 table ,这样你就不会在每一帧都破坏你的纹理。还使用 2 的幂的表大小,以便 hash & MASK 将正确包装。

适用一般哈希表建议。您的哈希表可能会有所不同。

关于plugins - 可以更改 OpenGL 纹理名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com