Hello all, please help. I’m getting mad.
I’m trying to implement the Pixel-perfect collision testing in cocos2d-js.
I can not get pixel buffer cleared. I don’t know why.
I do:
var winSize = cc.director.getWinSize();
var rend = new cc.RenderTexture( winSize.width , winSize.height, cc.Texture2D.PIXEL_FORMAT_RGBA8888);
var pixels = new Uint8Array(4 * ~~numPixels);
rend.beginWithClear( 0, 0, 0, 255);
gl.readPixels(x, y, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
rend.end();
for(var i = 0; i < ~~numPixels; i+= 1)
{
var rb = pixels[4*i + 0];
var gb = pixels[4*i + 1];
DEBUG(LEVEL_DEBUG, "PP - collision test", "i=%s; rb=%s; gb=%s;", ""+i, ""+rb, ""+gb);
}
So far I do not do even any drawing. Just trying to clear buffer in renderTexture, readPixels and check them if it was cleared. It was not.
I even tried first to fill the array pixels
with some known values, checked it - yes it was there. After readPixels
there are different values but not clear… What is wrong? Can somebody help? I also tried rend.cleanup();
I tried split beginWithClear
to separate clear()
and begin()
… same result. I tried rend.clearRect
… rend.setClearColor
… nothing helped.
What can I do?
Thanks a lot.
P.S. I found that I could probably need to call Director::getInstance()->getRenderer()->render();
after rend.end();
to force to proceed pending commands immediately.
Trying it for hours and studding jsBindings and JSB I was not able to access the renderer nor call its method render()… Is it possible from java-script? How?