.set_help("Inspects general GL state",
"state vertex\n"
" Print current vertex attributes\n\n"
+ "state array\n"
+ " Show current vertex arrays\n\n"
"state bind\n"
" Show current bindings\n");
decoder->gldBreak = gldBreak;
}
+Inspector::~Inspector()
+{
+ gldecoder_delete(decoder);
+}
+
void Inspector::decode(const char *data, unsigned len)
{
if(query_state)
GlPacket *pkt = packet_begin(FUNC_GLDQUERYLIMITS);
gldbg.send(pkt);
query_state = 0;
+ gldbg.clear_breakpoint(FUNC_GLXMAKECURRENT, BREAK_RETURN, this);
gldbg.resume_from_break(this);
}
}
const Vector3 &normal = glstate.get_normal();
printf(" Normal: [%05.3f, %05.3f, %05.3f]\n", normal.x, normal.y, normal.z);
}
+ else if(args=="array")
+ {
+ printf("Current vertex arrays:\n");
+ string descr = glstate.get_array(GL_VERTEX_ARRAY).describe();
+ printf(" Vertex: %s\n", descr.c_str());
+ descr = glstate.get_array(GL_NORMAL_ARRAY).describe();
+ printf(" Normal: %s\n", descr.c_str());
+ descr = glstate.get_array(GL_COLOR_ARRAY).describe();
+ printf(" Color: %s\n", descr.c_str());
+ unsigned count = glstate.get_max_texture_units();
+ for(unsigned i=0; i<count; ++i)
+ {
+ descr = glstate.get_texture_coord_array(i).describe();
+ printf(" TexCoord%d: %s\n", i, descr.c_str());
+ }
+ count = glstate.get_max_vertex_attribs();
+ for(unsigned i=0; i<count; ++i)
+ {
+ descr = glstate.get_attrib_array(i).describe();
+ printf(" Attrib%d:%s %s\n", i, (i>=10 ? " " : " "), descr.c_str());
+ }
+ }
else if(args=="bind")
{
printf("Current bindings:\n");
{
printf(" Texture unit %d:\n", i);
const TexUnitState &unit = glstate.get_texture_unit(i);
- string descr = unit.describe_binding(GL_TEXTURE_2D);
- printf(" GL_TEXTURE_2D: %s\n", descr.c_str());
+ string descr = unit.describe_binding(GL_TEXTURE_1D);
+ printf(" GL_TEXTURE_1D: %s\n", descr.c_str());
+ descr = unit.describe_binding(GL_TEXTURE_2D);
+ printf(" GL_TEXTURE_2D: %s\n", descr.c_str());
descr = unit.describe_binding(GL_TEXTURE_3D);
- printf(" GL_TEXTURE_3D: %s\n", descr.c_str());
+ printf(" GL_TEXTURE_3D: %s\n", descr.c_str());
+ descr = unit.describe_binding(GL_TEXTURE_CUBE_MAP);
+ printf(" GL_TEXTURE_CUBE_MAP: %s\n", descr.c_str());
}
printf(" Buffers:\n");
const BufferState *buf = glstate.get_current_buffer(GL_ARRAY_BUFFER);
if(args.empty())
{
const map<unsigned, TextureState> &textures = state.get_textures();
- printf("%d texture objects:\n", textures.size());
+ printf("%lu texture objects:\n", textures.size());
for(map<unsigned, TextureState>::const_iterator i = textures.begin(); i!=textures.end(); ++i)
{
const TextureState &tex = i->second;
string descr = tex.describe();
- printf(" %d: %s, %d images\n", i->first, descr.c_str(), tex.images.size());
+ printf(" %d: %s, %lu images\n", i->first, descr.c_str(), tex.images.size());
}
}
else
printf("Texture object %d\n", id);
printf(" Target: %s\n", describe_enum(tex.target, "TextureTarget"));
printf(" Images:\n");
- for(unsigned i=0; i<tex.images.size(); ++i)
+ if(tex.target==GL_TEXTURE_CUBE_MAP)
+ {
+ static const char *face_labels[6] = { "+X", "-X", "+Y", "-Y", "+Z", "-Z" };
+ for(unsigned i=0; i<6; ++i)
+ {
+ printf(" Face %s:\n", face_labels[i]);
+ for(unsigned j=i; j<tex.images.size(); j+=6)
+ {
+ string descr = tex.images[j].describe();
+ printf(" Level %2d: %s\n", j/6, descr.c_str());
+ }
+ }
+ }
+ else
{
- string descr = tex.images[i].describe();
- printf(" Level %2d: %s\n", i, descr.c_str());
+ for(unsigned i=0; i<tex.images.size(); ++i)
+ {
+ string descr = tex.images[i].describe();
+ printf(" Level %2d: %s\n", i, descr.c_str());
+ }
}
printf(" Min. filter: %s\n", describe_enum(tex.min_filter, "TextureMinFilter"));
printf(" Mag. filter: %s\n", describe_enum(tex.mag_filter, "TextureMagFilter"));
- printf(" Wrap modes: S=%s / T=%s / R=%s\n", describe_enum(tex.wrap_s, "TextureWrapMode"),
- describe_enum(tex.wrap_t, "TextureWrapMode"), describe_enum(tex.wrap_r, "TextureWrapMode"));
+ printf(" Wrap modes:\n");
+ printf(" S: %s\n", describe_enum(tex.wrap_s, "TextureWrapMode"));
+ printf(" T: %s\n", describe_enum(tex.wrap_t, "TextureWrapMode"));
+ printf(" R: %s\n", describe_enum(tex.wrap_r, "TextureWrapMode"));
printf(" Compare mode: %s\n", describe_enum(tex.compare_mode, ""));
printf(" Compare func: %s\n", describe_enum(tex.compare_func, "DepthFunction"));
printf(" Generate mipmap: %s\n", (tex.generate_mipmap ? "true" : "false"));
if(args.empty())
{
const GlState::BufferMap &buffers = state.get_buffers();
- printf("%d buffers:\n", buffers.size());
+ printf("%lu buffers:\n", buffers.size());
for(GlState::BufferMap::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
{
string descr = i->second.describe();
if(args.empty())
{
const GlState::ShaderMap &shaders = state.get_shaders();
- printf("%d shader objects:\n", shaders.size());
+ printf("%lu shader objects:\n", shaders.size());
for(GlState::ShaderMap::const_iterator i=shaders.begin(); i!=shaders.end(); ++i)
{
string descr = i->second.describe();
if(args.empty())
{
const GlState::ProgramMap &programs = state.get_programs();
- printf("%d program objects:\n", programs.size());
+ printf("%lu program objects:\n", programs.size());
for(GlState::ProgramMap::const_iterator i=programs.begin(); i!=programs.end(); ++i)
{
string descr = i->second.describe();