if mo:
self.call_no = int(mo.group(1))
function_name = mo.group(2)
- if function_name.find('SwapBuffers') != -1:
+ if function_name.find('SwapBuffers') != -1 or \
+ line.find('kCGLPFADoubleBuffer') != -1:
swapbuffers += 1
if function_name in ('glFlush', 'glFinish'):
flushes += 1
def checkState(self, callNo, refStateFileName):
srcState = self.getState(callNo)
- refState = json.load(open(refStateFileName, 'rt'), strict=False)
+ refState = self.getRefState(refStateFileName)
from jsondiff import Comparer, Differ
comparer = Comparer(ignore_added = True)
differ.visit(refState, srcState)
fail('state from call %u does not match %s' % (callNo, refStateFileName))
+ # Allo non-standard JS comments in JSON
+ json_comment_re = re.compile(r'//.*$', re.MULTILINE)
+
+ def getRefState(self, refStateFileName):
+ data = open(refStateFileName, 'rt').read()
+ data = self.json_comment_re.sub('', data)
+ return json.loads(data, strict=False)
+
def getNamePrefix(self):
name = os.path.basename(self.ref_dump)
try:
def getImage(self, callNo):
state = self.getState(callNo)
- framebuffer = state['framebuffer']
if self.doubleBuffer:
- imageObj = framebuffer['GL_BACK']
+ attachments = ['GL_BACK', 'GL_BACK_LEFT', 'GL_BACK_RIGHT', 'GL_COLOR_ATTACHMENT0']
else:
- imageObj = framebuffer['GL_FRONT']
+ attachments = ['GL_FRONT', 'GL_FRONT_LEFT', 'GL_FRONT_RIGHT', 'GL_COLOR_ATTACHMENT0']
+ imageObj = self.getFramebufferAttachment(state, attachments)
data = imageObj['__data__']
stream = StringIO(base64.b64decode(data))
im = Image.open(stream)
im.save('test.png')
return im
+ def getFramebufferAttachment(self, state, attachments):
+ framebufferObj = state['framebuffer']
+ for attachment in attachments:
+ try:
+ attachmentObj = framebufferObj[attachment]
+ except KeyError:
+ pass
+ else:
+ return attachmentObj
+ raise Exception("no attachment found")
+
def getState(self, callNo):
try:
state = self.stateCache[callNo]