前回の記事では面の選択でした。今回もその続きです。
面を選択すると色々と経て drawobject.c
の draw_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
は追っかけてみたけど、途中で辛くなったので諦めました。
glClearDepth
は glew.h
に宣言があって、下記リンクのドキュメントに解説があります。
解説には初期値は1とあるので、Blenderのコードはこれに沿って glClearDepth(1.0)
としているのだと思います。
Specifies the depth value used when the depth buffer is cleared. The initial value is 1.
GPU_clear
は gpu_framebuffer.c
に宣言があります。
void GPU_clear(GPUFrameBufferBits flags)
{
glClear(convert_buffer_bits_to_gl(flags));
}
GPUFrameBufferBits
は GPU_framebuffer.h
に宣言があります。
typedef enum GPUFrameBufferBits {
GPU_COLOR_BIT = (1 << 0),
GPU_DEPTH_BIT = (1 << 1),
GPU_STENCIL_BIT = (1 << 2),
} GPUFrameBufferBits;
glClear
は以下に解説があります。
-
glClear - OpenGL 4 Reference Pages
glClear
は引数にGLbitfieldを渡すことになっているので、convert_buffer_bits_to_gl
で BlenderのGPUFrameBufferBitsからOpenGLのGLbitfieldに変換します。
さて、今回はここまで。