the power of two
This commit is contained in:
parent
5c4627f247
commit
61ae05c003
1 changed files with 27 additions and 2 deletions
|
@ -17,6 +17,22 @@
|
|||
#define F16DOT16_TO_DOUBLE(x) (1 / 65536. * double(x))
|
||||
#define DOUBLE_TO_F16DOT16(x) FT_Fixed(65536. * x)
|
||||
|
||||
inline int32_t calculateUpperPowerOfTwo(int32_t v){
|
||||
v--;
|
||||
v |= v >> 1;
|
||||
v |= v >> 2;
|
||||
v |= v >> 4;
|
||||
v |= v >> 8;
|
||||
v |= v >> 16;
|
||||
v++;
|
||||
return v;
|
||||
}
|
||||
|
||||
inline bool isPowerOfTwo(int i){
|
||||
return (i & (i - 1)) == 0;
|
||||
}
|
||||
|
||||
|
||||
class Font {
|
||||
struct Glyph {
|
||||
FT_UInt index;
|
||||
|
@ -369,10 +385,15 @@ class Font {
|
|||
GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
|
||||
GL_NEAREST);
|
||||
|
||||
int bufferGlyphsSize = bufferGlyphs.size();
|
||||
if(!isPowerOfTwo(bufferGlyphsSize)){
|
||||
bufferGlyphsSize = calculateUpperPowerOfTwo(bufferGlyphsSize);
|
||||
}
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_RG32I,
|
||||
bufferGlyphs.size(),
|
||||
bufferGlyphsSize,
|
||||
1,
|
||||
0,
|
||||
GL_RG_INTEGER,
|
||||
|
@ -412,6 +433,10 @@ class Font {
|
|||
//GL_INT,
|
||||
//data);
|
||||
|
||||
int bufferCurvesSize = bufferCurves.size();
|
||||
if(!isPowerOfTwo(bufferCurvesSize)){
|
||||
bufferCurvesSize = calculateUpperPowerOfTwo(bufferCurvesSize);
|
||||
}
|
||||
glActiveTexture(GL_TEXTURE1);
|
||||
glBindTexture(GL_TEXTURE_2D, curveBuffer);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
|
@ -423,7 +448,7 @@ class Font {
|
|||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_RG32F,
|
||||
bufferCurves.size(),
|
||||
bufferCurvesSize,
|
||||
1,
|
||||
0,
|
||||
GL_RG,
|
||||
|
|
Loading…
Reference in a new issue