void PopAllTriangleListTransparency() { ARX_PROFILE_FUNC(); GRenderer->SetFogColor(Color::none); GRenderer->SetRenderState(Renderer::AlphaBlending, true); GRenderer->SetRenderState(Renderer::DepthWrite, false); GRenderer->SetBlendFunc(BlendDstColor, BlendOne); GRenderer->SetAlphaFunc(Renderer::CmpGreater, .5f); GRenderer->SetCulling(CullNone); PopOneTriangleList(&TexSpecialColor, true); TextureContainer * pTex = GetTextureList(); while(pTex) { PopOneTriangleListTransparency(pTex); pTex = pTex->m_pNext; } GRenderer->SetFogColor(ulBKGColor); GRenderer->SetRenderState(Renderer::AlphaBlending, false); GRenderer->SetRenderState(Renderer::DepthWrite, true); GRenderer->SetAlphaFunc(Renderer::CmpNotEqual, 0.f); }
void PopAllTriangleList(bool clear) { GRenderer->SetAlphaFunc(Renderer::CmpGreater, .5f); GRenderer->SetCulling(Renderer::CullNone); TextureContainer * pTex = GetTextureList(); while(pTex) { PopOneTriangleList(pTex, clear); pTex = pTex->m_pNext; } GRenderer->SetAlphaFunc(Renderer::CmpNotEqual, 0.f); }
static void UpdateColour3d(GtkButton * UNUSED(button), UpdateDetails * pDetails) { curDetails = pDetails; col3d = pDetails->mat; if (pwColourDialog3d == NULL) { pwColourDialog3d = GTKCreateDialog(_("3d Colour selection"), DT_QUESTION, pDetails->preview, DIALOG_FLAG_MODAL | DIALOG_FLAG_NORESPONSE, NULL, NULL); AddWidgets(DialogArea(pwColourDialog3d, DA_MAIN)); g_signal_connect(pwColourDialog3d, "response", G_CALLBACK(DialogClose), NULL); } else gtk_widget_show(pwColourDialog3d); /* Avoid updating preview */ bUpdate = FALSE; /* Setup widgets */ gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpAmbient), col3d.ambientColour); gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpDiffuse), col3d.diffuseColour); gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpSpecular), col3d.specularColour); gtk_adjustment_set_value(padjShine, (double) col3d.shine); if (IsFlagSet(pDetails->opacity, DF_VARIABLE_OPACITY)) { useOpacity = 1; gtk_adjustment_set_value(padjOpacity, col3d.alphaBlend ? (col3d.ambientColour[3] + .001) * 100 : 100.0); } else { useOpacity = 0; if (IsFlagSet(pDetails->opacity, DF_FULL_ALPHA)) opacityValue = 1; else opacityValue = 0; } if (IsFlagSet(pDetails->textureType, TT_NONE)) useTexture = 0; else { GList *glist = GetTextureList(pDetails->textureType); gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(textureComboBox)))); g_list_foreach(glist, append_to_combo_box, textureComboBox); g_list_free(glist); texture_set_active(); useTexture = 1; gtk_widget_set_sensitive(GTK_WIDGET(textureComboBox), !IsFlagSet(pDetails->textureType, TT_DISABLED)); } /* Copy material - to reset if cancel pressed */ memcpy(&cancelValue, &col3d, sizeof(Material)); /* show dialog */ gtk_widget_show_all(pwColourDialog3d); if (!useOpacity) { gtk_widget_hide(psOpacity); gtk_widget_hide(pOpacitylabel); } if (!useTexture) { gtk_widget_hide(textureComboBox); gtk_widget_hide(pTexturelabel); } /* Update preview */ bUpdate = TRUE; UpdateColourPreview(); gtk_main(); }