18 for (
int i = 0; i < 2; ++i) {
19 string header = string(
"#define SUPERIMPOSE ")
20 + char(
'0' + i) +
'\n';
23 scalerProgram[i].
attach(vertexShader);
24 scalerProgram[i].
attach(fragmentShader);
25 scalerProgram[i].
link();
27 if (GLEW_VERSION_2_0) {
29 glUniform1i(scalerProgram[i].getUniformLocation(
"colorTex"), 0);
31 glUniform1i(scalerProgram[i].getUniformLocation(
"videoTex"), 1);
33 glUniform1i(scalerProgram[i].getUniformLocation(
"edgeTex"), 2);
34 glUniform1i(scalerProgram[i].getUniformLocation(
"offsetTex"), 3);
35 glUniform1i(scalerProgram[i].getUniformLocation(
"weightTex"), 4);
36 glUniform2f(scalerProgram[i].getUniformLocation(
"texSize"),
44 glTexImage2D(GL_TEXTURE_2D,
56 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
57 for (
int i = 0; i < 3; ++i) {
60 "shaders/HQ" << n <<
"xOffsets.dat";
63 offsetTexture[i].
bind();
65 glTexImage2D(GL_TEXTURE_2D,
73 offsetsFile.mmap(size));
76 "shaders/HQ" << n <<
"xWeights.dat";
79 weightTexture[i].
bind();
80 glTexImage2D(GL_TEXTURE_2D,
88 weightsFile.mmap(size));
90 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
95 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
96 unsigned dstStartY,
unsigned dstEndY,
unsigned dstWidth,
97 unsigned logSrcHeight)
99 unsigned factorX = dstWidth / srcWidth;
100 unsigned factorY = (dstEndY - dstStartY) / (srcEndY - srcStartY);
102 auto& prog = scalerProgram[superImpose ? 1 : 0];
103 if ((srcWidth == 320) && (factorX > 1) && (factorX == factorY)) {
105 glActiveTexture(GL_TEXTURE4);
106 weightTexture[factorX - 2].
bind();
107 glActiveTexture(GL_TEXTURE3);
108 offsetTexture[factorX - 2].
bind();
109 glActiveTexture(GL_TEXTURE2);
112 glActiveTexture(GL_TEXTURE1);
115 glActiveTexture(GL_TEXTURE0);
118 dstStartY, dstEndY, dstWidth);
121 srcStartY, srcEndY, srcWidth,
122 dstStartY, dstEndY, dstWidth,
127 typedef unsigned Pixel;
129 unsigned srcStartY,
unsigned srcEndY,
unsigned lineWidth,
132 if (lineWidth != 320)
return;
134 unsigned tmpBuf2[320 / 2];
137 memset(tmpBuf2, 0,
sizeof(tmpBuf2));
146 if (
unsigned short* mapped = edgeBuffer.
mapWrite()) {
147 for (
unsigned y = srcStartY; y < srcEndY; ++y) {
151 memcpy(mapped + 320 * y, tmpBuf2, 320 *
sizeof(
unsigned short));
156 glTexSubImage2D(GL_TEXTURE_2D,