glReadPixels調査 (2)
glReadPixels に渡すバッファが足りないのは
使い方を間違えていたからでした。
あらかじめ必要な要素数の array を用意しないと seg.fault
するのは、前回説明した通りですが、
$pixels = array($width * $height);
で実験していて、これは間違いで、
$pixels = array_fill(0, $width * $height, 0);
です。
一応、これで落ちなくはなったけど。。。
値を受け取れない
PHP_FUNCTION(glreadpixels) { <略> v_pixels = php_array_to_long_array(pixels); glReadPixels((int)Z_LVAL_P(x),(int)Z_LVAL_P(y),(int)Z_LVAL_P(width),(int)Z_LVAL_P(height),(int)Z_LVAL_P(format),(int)Z_LVAL_P(type),v_pixels); }
なので、何も値が返ってきません。
実験
まず、引数を参照渡しにします。
ZEND_BEGIN_ARG_INFO_EX(force_ref_seventh_arg, 1, 0, 7)
ZEND_ARG_INFO(0, arg1)
ZEND_ARG_INFO(0, arg2)
ZEND_ARG_INFO(0, arg3)
ZEND_ARG_INFO(0, arg4)
ZEND_ARG_INFO(0, arg5)
ZEND_ARG_INFO(0, arg6)
ZEND_ARG_INFO(1, arg7)
ZEND_END_ARG_INFO()
function_entry opengl_functions[] = {
<略>
PHP_FE(glreadpixels,force_ref_seventh_arg)
PHP_FUNCTION(glreadpixels) の 最後に、
long_array_to_php_array(v_pixels, (int)Z_LVAL_P(width) * Z_LVAL_P(height)* 4 /*U_LONG size*/, pixels); }
の一行を追加してみたけど、何も変わる様子無いです。
long_array_to_php_array の処理は予想通りだったので、
Zend API の使い方に何か問題があるのかも。