X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=flavors%2Fgl%2Fsource%2Finspector.cpp;h=5db0d3d4b1b6971532c8e1528ab06cd31bdb2a3d;hb=HEAD;hp=122c2e45298f340ddfe935a2f5e29375dcde480c;hpb=d72ef6d75a11f6cc05ab8ec039520719e1044741;p=gldbg.git diff --git a/flavors/gl/source/inspector.cpp b/flavors/gl/source/inspector.cpp index 122c2e4..5db0d3d 100644 --- a/flavors/gl/source/inspector.cpp +++ b/flavors/gl/source/inspector.cpp @@ -21,6 +21,8 @@ Inspector::Inspector(GlDbg &d): .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"); @@ -55,6 +57,11 @@ Inspector::Inspector(GlDbg &d): decoder->gldBreak = gldBreak; } +Inspector::~Inspector() +{ + gldecoder_delete(decoder); +} + void Inspector::decode(const char *data, unsigned len) { if(query_state) @@ -75,6 +82,7 @@ void Inspector::process_stopped(int reason) 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); } } @@ -118,6 +126,28 @@ void Inspector::cmd_state(const string &args) 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=10 ? " " : " "), descr.c_str()); + } + } else if(args=="bind") { printf("Current bindings:\n"); @@ -126,10 +156,14 @@ void Inspector::cmd_state(const string &args) { 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); @@ -155,12 +189,12 @@ void Inspector::cmd_texture(const string &args) if(args.empty()) { const map &textures = state.get_textures(); - printf("%d texture objects:\n", textures.size()); + printf("%lu texture objects:\n", textures.size()); for(map::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 @@ -174,15 +208,33 @@ void Inspector::cmd_texture(const string &args) printf("Texture object %d\n", id); printf(" Target: %s\n", describe_enum(tex.target, "TextureTarget")); printf(" Images:\n"); - for(unsigned i=0; isecond.describe(); @@ -337,7 +389,7 @@ void Inspector::cmd_shader(const string &args) 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(); @@ -380,7 +432,7 @@ void Inspector::cmd_program(const std::string &args) 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();