OpenSubdiv: Properly support active UV layer in textured view

This commit is contained in:
Sergey Sharybin 2016-07-22 14:50:21 +02:00
parent 48c4b700dc
commit ccd51bb922
2 changed files with 10 additions and 3 deletions

View File

@ -439,7 +439,10 @@ void bindProgram(OpenSubdiv_GLMesh *gl_mesh, int program)
/* See notes below about why we use such values. */
/* TOO(sergey): Get proper value for FVar width. */
glUniform1i(glGetUniformLocation(program, "osd_fvar_count"), 2);
if (gl_mesh->fvar_data->channel_offsets.size() > 0 && g_active_uv_index >= 0) {
if (gl_mesh->fvar_data != NULL &&
gl_mesh->fvar_data->channel_offsets.size() > 0 &&
g_active_uv_index >= 0)
{
glUniform1i(glGetUniformLocation(program, "osd_active_uv_offset"),
gl_mesh->fvar_data->channel_offsets[g_active_uv_index]);
} else {
@ -624,7 +627,10 @@ static GLuint prepare_patchDraw(OpenSubdiv_GLMesh *gl_mesh,
location = glGetUniformLocation(program, "osd_active_uv_offset");
if (location != -1) {
if (gl_mesh->fvar_data->channel_offsets.size() > 0 && g_active_uv_index >= 0) {
if (gl_mesh->fvar_data != NULL &&
gl_mesh->fvar_data->channel_offsets.size() > 0 &&
g_active_uv_index >= 0)
{
glUniform1i(location,
gl_mesh->fvar_data->channel_offsets[g_active_uv_index]);
} else {

View File

@ -3401,7 +3401,8 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
#ifdef WITH_OPENSUBDIV
if (ccgdm->useGpuBackend) {
if (UNLIKELY(ccgSubSurf_prepareGLMesh(ss, true, -1) == false)) {
const int active_uv_layer = CustomData_get_active_layer_index(&dm->loopData, CD_MLOOPUV);
if (UNLIKELY(ccgSubSurf_prepareGLMesh(ss, true, active_uv_layer) == false)) {
return;
}
if (drawParams == NULL) {