通过char快速访问glpyh纹理的数据结构
Data structure for quick access to glpyh textures via char
我正在尝试创建一个允许用户输入文本的编辑框。我已经为此工作了一段时间,并提出了不同的想法。最终,我认为提供最佳性能的方法是将.ttf中的所有角色(我使用SDL为openGL管理事件、窗口、文本和图像)加载到它们自己的曲面上,然后将这些曲面一次性渲染到纹理上。然后每一帧,我可以在适当的位置绑定一个适当的纹理。
然而,现在我正在考虑如何访问这些字形。我有限的bkg会说这样的话:
struct CharTextures {
char glpyh;
GLuint TextureID;
int Width;
int Height;
CharTextures* Next;
}
//Code
CharTexture* FindGlyph(char Foo) {
CharTextures* Poo = _FirstOne;
while( Poo != NULL ) {
if( Foo == Poo->glyph ) {
return Poo;
}
Poo = Poo->Next;
}
return NULL;
}
我知道这会奏效的。然而,每次迭代整个列表似乎非常浪费。我的脚本编写经验教会了我一些lua,它们在lua中有允许各种类型的无序索引的表。我怎么能在C++中模仿它,这样我就可以做一些事情,比如:
CharTexture* FindGlyph(char Foo) {
return PooPointers[Foo]; //somehow use the character as a key to get pointer to glyph without iteration
}
我想我可以尝试转换为数值,但我不知道如何将char转换为UTF8值,以及是否可以将其用作键。我可以转换成ascii,但它能处理我想要键入的所有字符吗?我正试图让这个应用程序在mac和windows上运行,但不确定机器的具体情况。我读过不同格式的差异(ascii v unicode v utf8 v utf16等)。。。我知道这与位宽和字节序有关,但我对平台之间的接口差异以及所述字节序对我的代码的影响了解相对较少。
感谢
您可能想要的是
std::map<char,CharTexture*> PooPointers;
使用数组访问操作符也会使用一些在地图后面搜索的场景,但是经过了优化。
g-makulik所说的可能是对的。这张地图可能就是你想要的。为了扩展回复,地图会根据关键字(本例中为char)自动排序,因此使用可以非常快速地根据字符进行查找
CharTexture* pCharTexture = PooPointers[char];
如果您想要一个稀疏的数据结构,而不是预先定义每个角色的纹理。
请注意,在不存在条目的地方运行上面的代码将在映射中创建一个默认条目。
根据您的一般需求,如果广义排序不重要,或者您知道总是有固定数量的字符,您也可以使用简单的向量。可以为每个可能的字符使用预定义的数据填充矢量。
这完全取决于你的内存需求。
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 通过char快速访问glpyh纹理的数据结构