(ctx context.Context, id api.CmdID, thread uint64, width, height uint32, fb FramebufferId, attachment GLenum, version *Version, out transform.Writer, res replay.Result)
| 81 | } |
| 82 | |
| 83 | func postFBData(ctx context.Context, |
| 84 | id api.CmdID, |
| 85 | thread uint64, |
| 86 | width, height uint32, |
| 87 | fb FramebufferId, |
| 88 | attachment GLenum, |
| 89 | version *Version, |
| 90 | out transform.Writer, |
| 91 | res replay.Result) { |
| 92 | |
| 93 | s := out.State() |
| 94 | c := GetContext(s, thread) |
| 95 | |
| 96 | if fb == 0 { |
| 97 | var err error |
| 98 | if fb, err = getBoundFramebufferID(thread, s); err != nil { |
| 99 | log.W(ctx, "Could not read framebuffer after cmd %v: %v", id, err) |
| 100 | res(nil, &service.ErrDataUnavailable{Reason: messages.ErrFramebufferUnavailable()}) |
| 101 | return |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | fbai, err := GetState(s).getFramebufferAttachmentInfo(thread, fb, attachment) |
| 106 | if err != nil { |
| 107 | log.W(ctx, "Failed to read framebuffer after cmd %v: %v", id, err) |
| 108 | res(nil, &service.ErrDataUnavailable{Reason: messages.ErrFramebufferUnavailable()}) |
| 109 | return |
| 110 | } |
| 111 | if fbai.sizedFormat == 0 { |
| 112 | log.W(ctx, "Failed to read framebuffer after cmd %v: no image format", id) |
| 113 | res(nil, &service.ErrDataUnavailable{Reason: messages.ErrFramebufferUnavailable()}) |
| 114 | return |
| 115 | } |
| 116 | |
| 117 | var ( |
| 118 | inW = int32(fbai.width) |
| 119 | inH = int32(fbai.height) |
| 120 | outW = int32(width) |
| 121 | outH = int32(height) |
| 122 | ) |
| 123 | |
| 124 | if outW == 0 { |
| 125 | outW = inW |
| 126 | } |
| 127 | if outH == 0 { |
| 128 | outH = inH |
| 129 | } |
| 130 | |
| 131 | dID := id.Derived() |
| 132 | cb := CommandBuilder{Thread: thread, Arena: s.Arena} |
| 133 | t := newTweaker(out, dID, cb) |
| 134 | defer t.revert(ctx) |
| 135 | t.glBindFramebuffer_Read(ctx, fb) |
| 136 | |
| 137 | unsizedFormat, ty := getUnsizedFormatAndType(fbai.sizedFormat) |
| 138 | |
| 139 | imgFmt, err := getImageFormat(unsizedFormat, ty) |
| 140 | if err != nil { |
no test coverage detected