January 9, 2019

BlenderのソースコードをXcodeで読む Part6

前回の記事では面の選択でした。今回もその続きです。

面を選択すると色々と経て drawobject.cdraw_object_backbufsel が動きます。

void draw_object_backbufsel(
        Depsgraph *depsgraph, Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob,
        short select_mode)
{
	ToolSettings *ts = scene->toolsettings;
	if (select_mode == -1) {
		select_mode = ts->selectmode;
	}

	GPU_matrix_mul(ob->obmat);

	glClearDepth(1.0); GPU_clear(GPU_DEPTH_BIT);
	GPU_depth_test(true);
:
:
:

ToolSettings は後回し。

GPU_matrix_mul は追っかけてみたけど、途中で辛くなったので諦めました。

glClearDepthglew.h に宣言があって、下記リンクのドキュメントに解説があります。

解説には初期値は1とあるので、Blenderのコードはこれに沿って glClearDepth(1.0) としているのだと思います。

Specifies the depth value used when the depth buffer is cleared. The initial value is 1.

GPU_cleargpu_framebuffer.c に宣言があります。

void GPU_clear(GPUFrameBufferBits flags)
{
	glClear(convert_buffer_bits_to_gl(flags));
}

GPUFrameBufferBitsGPU_framebuffer.h に宣言があります。

typedef enum GPUFrameBufferBits {
	GPU_COLOR_BIT    = (1 << 0),
	GPU_DEPTH_BIT    = (1 << 1),
	GPU_STENCIL_BIT  = (1 << 2),
} GPUFrameBufferBits;

glClear は以下に解説があります。

glClear は引数にGLbitfieldを渡すことになっているので、 convert_buffer_bits_to_gl で BlenderのGPUFrameBufferBitsからOpenGLのGLbitfieldに変換します。

さて、今回はここまで。