|
|
@@ -288,6 +288,54 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth, |
|
|
|
dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
else if (datatype == GL_SHORT && comps == 4) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLshort(*rowA)[4] = (const GLshort(*)[4]) srcRowA; |
|
|
|
const GLshort(*rowB)[4] = (const GLshort(*)[4]) srcRowB; |
|
|
|
GLshort(*dst)[4] = (GLshort(*)[4]) dstRow; |
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4; |
|
|
|
dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4; |
|
|
|
dst[i][2] = (rowA[j][2] + rowA[k][2] + rowB[j][2] + rowB[k][2]) / 4; |
|
|
|
dst[i][3] = (rowA[j][3] + rowA[k][3] + rowB[j][3] + rowB[k][3]) / 4; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (datatype == GL_SHORT && comps == 3) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLshort(*rowA)[3] = (const GLshort(*)[3]) srcRowA; |
|
|
|
const GLshort(*rowB)[3] = (const GLshort(*)[3]) srcRowB; |
|
|
|
GLshort(*dst)[3] = (GLshort(*)[3]) dstRow; |
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4; |
|
|
|
dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4; |
|
|
|
dst[i][2] = (rowA[j][2] + rowA[k][2] + rowB[j][2] + rowB[k][2]) / 4; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (datatype == GL_SHORT && comps == 2) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLshort(*rowA)[2] = (const GLshort(*)[2]) srcRowA; |
|
|
|
const GLshort(*rowB)[2] = (const GLshort(*)[2]) srcRowB; |
|
|
|
GLshort(*dst)[2] = (GLshort(*)[2]) dstRow; |
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4; |
|
|
|
dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (datatype == GL_SHORT && comps == 1) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLshort *rowA = (const GLshort *) srcRowA; |
|
|
|
const GLshort *rowB = (const GLshort *) srcRowB; |
|
|
|
GLshort *dst = (GLshort *) dstRow; |
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
else if (datatype == GL_FLOAT && comps == 4) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLfloat(*rowA)[4] = (const GLfloat(*)[4]) srcRowA; |
|
|
@@ -507,6 +555,37 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth, |
|
|
|
dst[i] = (alpha << 15) | (blue << 10) | (green << 5) | red; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (datatype == GL_UNSIGNED_SHORT_5_5_5_1 && comps == 4) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLushort *rowA = (const GLushort *) srcRowA; |
|
|
|
const GLushort *rowB = (const GLushort *) srcRowB; |
|
|
|
GLushort *dst = (GLushort *) dstRow; |
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
const GLint rowAr0 = (rowA[j] >> 11) & 0x1f; |
|
|
|
const GLint rowAr1 = (rowA[k] >> 11) & 0x1f; |
|
|
|
const GLint rowBr0 = (rowB[j] >> 11) & 0x1f; |
|
|
|
const GLint rowBr1 = (rowB[k] >> 11) & 0x1f; |
|
|
|
const GLint rowAg0 = (rowA[j] >> 6) & 0x1f; |
|
|
|
const GLint rowAg1 = (rowA[k] >> 6) & 0x1f; |
|
|
|
const GLint rowBg0 = (rowB[j] >> 6) & 0x1f; |
|
|
|
const GLint rowBg1 = (rowB[k] >> 6) & 0x1f; |
|
|
|
const GLint rowAb0 = (rowA[j] >> 1) & 0x1f; |
|
|
|
const GLint rowAb1 = (rowA[k] >> 1) & 0x1f; |
|
|
|
const GLint rowBb0 = (rowB[j] >> 1) & 0x1f; |
|
|
|
const GLint rowBb1 = (rowB[k] >> 1) & 0x1f; |
|
|
|
const GLint rowAa0 = (rowA[j] & 0x1); |
|
|
|
const GLint rowAa1 = (rowA[k] & 0x1); |
|
|
|
const GLint rowBa0 = (rowB[j] & 0x1); |
|
|
|
const GLint rowBa1 = (rowB[k] & 0x1); |
|
|
|
const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; |
|
|
|
const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; |
|
|
|
const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; |
|
|
|
const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; |
|
|
|
dst[i] = (red << 11) | (green << 6) | (blue << 1) | alpha; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
else if (datatype == GL_UNSIGNED_BYTE_3_3_2 && comps == 3) { |
|
|
|
GLuint i, j, k; |
|
|
|
const GLubyte *rowA = (const GLubyte *) srcRowA; |
|
|
@@ -682,6 +761,44 @@ do_row_3D(GLenum datatype, GLuint comps, GLint srcWidth, |
|
|
|
FILTER_3D(0); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_SHORT) && (comps == 4)) { |
|
|
|
DECLARE_ROW_POINTERS(GLshort, 4); |
|
|
|
|
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
FILTER_3D(0); |
|
|
|
FILTER_3D(1); |
|
|
|
FILTER_3D(2); |
|
|
|
FILTER_3D(3); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_SHORT) && (comps == 3)) { |
|
|
|
DECLARE_ROW_POINTERS(GLshort, 3); |
|
|
|
|
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
FILTER_3D(0); |
|
|
|
FILTER_3D(1); |
|
|
|
FILTER_3D(2); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_SHORT) && (comps == 2)) { |
|
|
|
DECLARE_ROW_POINTERS(GLshort, 2); |
|
|
|
|
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
FILTER_3D(0); |
|
|
|
FILTER_3D(1); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_SHORT) && (comps == 1)) { |
|
|
|
DECLARE_ROW_POINTERS(GLshort, 1); |
|
|
|
|
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
FILTER_3D(0); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_FLOAT) && (comps == 4)) { |
|
|
|
DECLARE_ROW_POINTERS(GLfloat, 4); |
|
|
|
|
|
|
@@ -910,6 +1027,55 @@ do_row_3D(GLenum datatype, GLuint comps, GLint srcWidth, |
|
|
|
dst[i] = (a << 15) | (b << 10) | (g << 5) | r; |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_UNSIGNED_SHORT_5_5_5_1) && (comps == 4)) { |
|
|
|
DECLARE_ROW_POINTERS0(GLushort); |
|
|
|
|
|
|
|
for (i = j = 0, k = k0; i < (GLuint) dstWidth; |
|
|
|
i++, j += colStride, k += colStride) { |
|
|
|
const GLint rowAr0 = (rowA[j] >> 11) & 0x1f; |
|
|
|
const GLint rowAr1 = (rowA[k] >> 11) & 0x1f; |
|
|
|
const GLint rowBr0 = (rowB[j] >> 11) & 0x1f; |
|
|
|
const GLint rowBr1 = (rowB[k] >> 11) & 0x1f; |
|
|
|
const GLint rowCr0 = (rowC[j] >> 11) & 0x1f; |
|
|
|
const GLint rowCr1 = (rowC[k] >> 11) & 0x1f; |
|
|
|
const GLint rowDr0 = (rowD[j] >> 11) & 0x1f; |
|
|
|
const GLint rowDr1 = (rowD[k] >> 11) & 0x1f; |
|
|
|
const GLint rowAg0 = (rowA[j] >> 6) & 0x1f; |
|
|
|
const GLint rowAg1 = (rowA[k] >> 6) & 0x1f; |
|
|
|
const GLint rowBg0 = (rowB[j] >> 6) & 0x1f; |
|
|
|
const GLint rowBg1 = (rowB[k] >> 6) & 0x1f; |
|
|
|
const GLint rowCg0 = (rowC[j] >> 6) & 0x1f; |
|
|
|
const GLint rowCg1 = (rowC[k] >> 6) & 0x1f; |
|
|
|
const GLint rowDg0 = (rowD[j] >> 6) & 0x1f; |
|
|
|
const GLint rowDg1 = (rowD[k] >> 6) & 0x1f; |
|
|
|
const GLint rowAb0 = (rowA[j] >> 1) & 0x1f; |
|
|
|
const GLint rowAb1 = (rowA[k] >> 1) & 0x1f; |
|
|
|
const GLint rowBb0 = (rowB[j] >> 1) & 0x1f; |
|
|
|
const GLint rowBb1 = (rowB[k] >> 1) & 0x1f; |
|
|
|
const GLint rowCb0 = (rowC[j] >> 1) & 0x1f; |
|
|
|
const GLint rowCb1 = (rowC[k] >> 1) & 0x1f; |
|
|
|
const GLint rowDb0 = (rowD[j] >> 1) & 0x1f; |
|
|
|
const GLint rowDb1 = (rowD[k] >> 1) & 0x1f; |
|
|
|
const GLint rowAa0 = (rowA[j] & 0x1); |
|
|
|
const GLint rowAa1 = (rowA[k] & 0x1); |
|
|
|
const GLint rowBa0 = (rowB[j] & 0x1); |
|
|
|
const GLint rowBa1 = (rowB[k] & 0x1); |
|
|
|
const GLint rowCa0 = (rowC[j] & 0x1); |
|
|
|
const GLint rowCa1 = (rowC[k] & 0x1); |
|
|
|
const GLint rowDa0 = (rowD[j] & 0x1); |
|
|
|
const GLint rowDa1 = (rowD[k] & 0x1); |
|
|
|
const GLint r = FILTER_SUM_3D(rowAr0, rowAr1, rowBr0, rowBr1, |
|
|
|
rowCr0, rowCr1, rowDr0, rowDr1); |
|
|
|
const GLint g = FILTER_SUM_3D(rowAg0, rowAg1, rowBg0, rowBg1, |
|
|
|
rowCg0, rowCg1, rowDg0, rowDg1); |
|
|
|
const GLint b = FILTER_SUM_3D(rowAb0, rowAb1, rowBb0, rowBb1, |
|
|
|
rowCb0, rowCb1, rowDb0, rowDb1); |
|
|
|
const GLint a = FILTER_SUM_3D(rowAa0, rowAa1, rowBa0, rowBa1, |
|
|
|
rowCa0, rowCa1, rowDa0, rowDa1); |
|
|
|
|
|
|
|
dst[i] = (r << 11) | (g << 6) | (b << 1) | a; |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((datatype == GL_UNSIGNED_BYTE_3_3_2) && (comps == 3)) { |
|
|
|
DECLARE_ROW_POINTERS0(GLushort); |
|
|
|
|