Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Mesa
piglit
Commits
9449827c
Commit
9449827c
authored
Aug 20, 2008
by
Emma Anholt
Browse files
New test: texturing/gen-texsubimage
Tests that SGIS_generate_mipmap occurs after TexSubImage. Catches bug #17077.
parent
d62c5606
Changes
3
Hide whitespace changes
Inline
Side-by-side
tests/all.tests
View file @
9449827c
...
...
@@ -86,6 +86,7 @@ bugs['tex1d-2dborder'] = PlainExecTest([testBinDir + 'tex1d-2dborder', '-auto'])
texturing
=
Group
()
texturing
[
'copytexsubimage'
]
=
PlainExecTest
([
testBinDir
+
'copytexsubimage'
,
'-auto'
])
texturing
[
'cubemap'
]
=
PlainExecTest
([
testBinDir
+
'cubemap'
,
'-auto'
])
texturing
[
'gen-texsubimage'
]
=
PlainExecTest
([
testBinDir
+
'gen-texsubimage'
,
'-auto'
])
texturing
[
'lodbias'
]
=
PlainExecTest
([
testBinDir
+
'lodbias'
,
'-auto'
])
texturing
[
'tex3d'
]
=
PlainExecTest
([
testBinDir
+
'tex3d'
])
texturing
[
'texdepth'
]
=
PlainExecTest
([
testBinDir
+
'texdepth'
,
'-auto'
])
...
...
tests/texturing/CMakeLists.txt
View file @
9449827c
...
...
@@ -20,6 +20,7 @@ link_libraries (
add_executable
(
copytexsubimage copytexsubimage.c
)
add_executable
(
cubemap cubemap.c
)
add_executable
(
gen-texsubimage gen-texsubimage.c
)
add_executable
(
lodbias lodbias.c
)
add_executable
(
tex3d tex3d.c
)
add_executable
(
texdepth texdepth.c
)
...
...
tests/texturing/gen-texsubimage.c
0 → 100644
View file @
9449827c
/*
* Copyright © 2008 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* Authors:
* Chris Lord <chris@openedhand.com>
* Eric Anholt <eric@anholt.net>
*
*/
/** @file gen-texsubimage.c
*
* Tests that the full mipmap tree is correctly updated after calling
* glTexSubImage() when GL_GENERATE_MIPMAP is enabled. Based on a test
* in bug #17077.
*/
#include "GL/glut.h"
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <math.h>
#include "piglit-util.h"
#define WIN_WIDTH 512
#define WIN_HEIGHT 512
static
GLboolean
Automatic
=
GL_FALSE
;
static
void
display_mipmaps
(
int
start_x
,
int
start_y
)
{
int
i
;
/* Disply all the mipmap levels */
for
(
i
=
256
;
i
>
0
;
i
/=
2
)
{
glBegin
(
GL_QUADS
);
glTexCoord2f
(
0
.
0
,
0
.
0
);
glVertex2f
(
start_x
+
0
,
start_y
+
0
);
glTexCoord2f
(
1
.
0
,
0
.
0
);
glVertex2f
(
start_x
+
i
,
start_y
+
0
);
glTexCoord2f
(
1
.
0
,
1
.
0
);
glVertex2f
(
start_x
+
i
,
start_y
+
i
);
glTexCoord2f
(
0
.
0
,
1
.
0
);
glVertex2f
(
start_x
+
0
,
start_y
+
i
);
glEnd
();
start_x
+=
i
;
}
}
/**
* Returns whether the pixel at the coordinates matches the referenced color.
*
* Only the RGB channels are considered.
*/
static
GLboolean
probe_pixel
(
int
x
,
int
y
,
const
GLfloat
*
color
)
{
GLfloat
probe
[
4
],
delta
[
3
];
GLfloat
dmax
=
0
;
int
i
;
glReadPixels
(
x
,
y
,
1
,
1
,
GL_RGBA
,
GL_FLOAT
,
probe
);
for
(
i
=
0
;
i
<
3
;
i
++
)
{
delta
[
i
]
=
probe
[
i
]
-
color
[
i
];
if
(
dmax
<
fabs
(
delta
[
i
]))
dmax
=
fabs
(
delta
[
i
]);
}
if
(
dmax
>
.
02
)
{
printf
(
"Expected at (%d,%d): %f,%f,%f
\n
"
,
x
,
y
,
color
[
0
],
color
[
1
],
color
[
2
]);
printf
(
"Probed at (%d,%d): %f,%f,%f
\n
"
,
x
,
y
,
probe
[
0
],
probe
[
1
],
probe
[
2
]);
return
GL_FALSE
;
}
return
GL_TRUE
;
}
static
GLboolean
check_resulting_mipmaps
(
int
x
,
int
y
,
const
GLfloat
*
color
)
{
GLboolean
pass
=
GL_TRUE
;
int
i
;
for
(
i
=
256
;
i
>
4
;
i
/=
2
)
{
pass
=
pass
&&
probe_pixel
(
x
+
i
/
2
,
y
+
i
/
2
,
color
);
x
+=
i
;
}
return
pass
;
}
static
void
display
()
{
GLfloat
*
data
;
const
GLfloat
red
[
4
]
=
{
1
.
0
,
0
.
0
,
0
.
0
,
0
.
0
};
const
GLfloat
blue
[
4
]
=
{
0
.
0
,
0
.
0
,
1
.
0
,
0
.
0
};
GLint
texture
;
int
i
;
glClearColor
(
0
,
0
,
0
,
0
);
glClear
(
GL_COLOR_BUFFER_BIT
);
/* Set up texture object with mipmap generation */
glGenTextures
(
1
,
&
texture
);
glBindTexture
(
GL_TEXTURE_2D
,
texture
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_CLAMP_TO_EDGE
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_CLAMP_TO_EDGE
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR_MIPMAP_NEAREST
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_GENERATE_MIPMAP
,
GL_TRUE
);
data
=
malloc
(
256
*
256
*
4
*
sizeof
(
GLfloat
));
for
(
i
=
0
;
i
<
4
*
256
*
256
;
i
+=
4
)
{
data
[
i
+
0
]
=
blue
[
0
];
data
[
i
+
1
]
=
blue
[
1
];
data
[
i
+
2
]
=
blue
[
2
];
data
[
i
+
3
]
=
blue
[
3
];
}
/* Initialize the texture to blue */
glTexImage2D
(
GL_TEXTURE_2D
,
0
,
GL_RGBA
,
256
,
256
,
0
,
GL_RGBA
,
GL_FLOAT
,
data
);
free
(
data
);
/* Display the original mipmaps */
display_mipmaps
(
0
,
0
);
/* Update a square inside the texture to red */
data
=
malloc
(
128
*
128
*
4
*
sizeof
(
GLfloat
));
for
(
i
=
0
;
i
<
4
*
128
*
128
;
i
+=
4
)
{
data
[
i
+
0
]
=
red
[
0
];
data
[
i
+
1
]
=
red
[
1
];
data
[
i
+
2
]
=
red
[
2
];
data
[
i
+
3
]
=
red
[
3
];
}
glTexSubImage2D
(
GL_TEXTURE_2D
,
0
,
64
,
64
,
128
,
128
,
GL_RGBA
,
GL_FLOAT
,
data
);
free
(
data
);
/* Display the mipmaps after subimage */
display_mipmaps
(
0
,
256
);
glDeleteTextures
(
1
,
&
texture
);
glutSwapBuffers
();
glFlush
();
if
(
Automatic
)
{
int
dim
;
GLboolean
pass
=
GL_TRUE
;
pass
=
pass
&&
check_resulting_mipmaps
(
0
,
0
,
blue
);
pass
=
pass
&&
check_resulting_mipmaps
(
0
,
256
,
red
);
if
(
Automatic
)
printf
(
"PIGLIT: {'result': '%s' }
\n
"
,
pass
?
"pass"
:
"fail"
);
sleep
(
5
);
exit
(
pass
?
0
:
1
);
}
}
static
void
init
()
{
piglit_require_extension
(
"GL_SGIS_generate_mipmap"
);
/* Set up projection matrix so we can just draw using window
* coordinates.
*/
glMatrixMode
(
GL_PROJECTION
);
glPushMatrix
();
glLoadIdentity
();
glOrtho
(
0
,
WIN_WIDTH
,
0
,
WIN_HEIGHT
,
-
1
,
1
);
glMatrixMode
(
GL_MODELVIEW
);
glPushMatrix
();
glLoadIdentity
();
glEnable
(
GL_TEXTURE_2D
);
}
int
main
(
int
argc
,
char
**
argv
)
{
int
i
;
glutInit
(
&
argc
,
argv
);
for
(
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
!
strcmp
(
argv
[
i
],
"-auto"
))
Automatic
=
1
;
else
printf
(
"Unknown option: %s
\n
"
,
argv
[
i
]);
}
glutInitDisplayMode
(
GLUT_DOUBLE
|
GLUT_RGB
);
glutInitWindowSize
(
WIN_WIDTH
,
WIN_HEIGHT
);
glutInitWindowPosition
(
100
,
100
);
glutCreateWindow
(
"gen-texsubimage"
);
init
();
glutDisplayFunc
(
display
);
glutMainLoop
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment