1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/*
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
package com.android.glesv2debugger;
import com.android.glesv2debugger.DebuggerMessage.Message;
import com.android.glesv2debugger.DebuggerMessage.Message.Function;
import com.android.glesv2debugger.DebuggerMessage.Message.Type;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Display;
public class MessageData {
public final Message msg;
private Image image = null; // texture
public String shader = null; // shader source
public String text;
public String[] columns = new String[3];
float[][] attribs = null;
short[] indices;
public MessageData(final Device device, final Message msg, final Context context) {
this.msg = msg;
StringBuilder builder = new StringBuilder();
final Function function = msg.getFunction();
if (function != Message.Function.ACK && msg.getType() != Type.BeforeCall)
assert msg.hasTime();
builder.append(columns[0] = function.name());
while (builder.length() < 30)
builder.append(' ');
columns[1] = String.format("%.3f", msg.getTime());
if (msg.hasClock())
columns[1] += String.format(":%.3f", msg.getClock());
builder.append(columns[1]);
builder.append(" ");
builder.append(String.format("0x%08X", msg.getContextId()));
builder.append(" ");
columns[2] = "";
if (msg.getType() == Type.BeforeCall) // incomplete call, client SKIPPED
columns[2] = "[BeforeCall(AfterCall missing)] ";
else if (msg.getType() == Type.AfterGeneratedCall)
columns[2] = "[AfterGeneratedCall] ";
else
assert msg.getType() == Type.CompleteCall;
columns[2] += MessageFormatter.format(msg, false);
builder.append(columns[2]);
switch (function) {
case glDrawArrays:
if (!msg.hasArg7())
break;
context.serverVertex.glDrawArrays(this);
break;
case glDrawElements:
if (!msg.hasArg7())
break;
context.serverVertex.glDrawElements(this);
break;
case glShaderSource:
shader = msg.getData().toStringUtf8();
break;
}
text = builder.toString();
}
public Image getImage() {
if (image != null)
return image;
ImageData imageData = null;
switch (msg.getFunction()) {
case glTexImage2D:
if (!msg.hasData())
return null;
imageData = MessageProcessor.receiveImage(msg.getArg3(), msg
.getArg4(), msg.getArg6(), msg.getArg7(), msg.getData());
return image = new Image(Display.getCurrent(), imageData);
case glTexSubImage2D:
assert msg.hasData();
imageData = MessageProcessor.receiveImage(msg.getArg4(), msg
.getArg5(), msg.getArg6(), msg.getArg7(), msg.getData());
return image = new Image(Display.getCurrent(), imageData);
case glCopyTexImage2D:
imageData = MessageProcessor.receiveImage(msg.getArg5(), msg.getArg6(),
msg.getPixelFormat(), msg.getPixelType(), msg.getData());
imageData = imageData.scaledTo(imageData.width, -imageData.height);
return image = new Image(Display.getCurrent(), imageData);
case glCopyTexSubImage2D:
imageData = MessageProcessor.receiveImage(msg.getArg6(), msg.getArg7(),
msg.getPixelFormat(), msg.getPixelType(), msg.getData());
imageData = imageData.scaledTo(imageData.width, -imageData.height);
return image = new Image(Display.getCurrent(), imageData);
case glReadPixels:
if (!msg.hasData())
return null;
imageData = MessageProcessor.receiveImage(msg.getArg2(), msg.getArg3(),
msg.getArg4(), msg.getArg5(), msg.getData());
imageData = imageData.scaledTo(imageData.width, -imageData.height);
return image = new Image(Display.getCurrent(), imageData);
case eglSwapBuffers:
if (!msg.hasData())
return null;
imageData = MessageProcessor.receiveImage(msg.getImageWidth(),
msg.getImageHeight(), msg.getPixelFormat(), msg.getPixelType(),
msg.getData());
imageData = imageData.scaledTo(imageData.width, -imageData.height);
return image = new Image(Display.getCurrent(), imageData);
default:
return null;
}
}
}
|