mediump vec3 v = normalize(vPositionToCamera); // Vector from surface point to camera
mediump float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);
mediump vec3 reflection = -normalize(reflect(v, n));
- lowp vec3 brdf = linear(texture(sbrdfLUT, vec2(NdotV, 1.0 - perceptualRoughness)).rgb);
+ lowp vec3 brdf = texture(sbrdfLUT, vec2(NdotV, 1.0 - perceptualRoughness)).rgb;
vec3 Fr = max(vec3(1.0 - perceptualRoughness), f0) - f0;
vec3 k_S = f0 + Fr * pow(1.0 - NdotV, 5.0);
vec3 FssEss = specularWeight * (k_S * brdf.x + brdf.y);
mEnvironmentMapTexture.Upload(side[iMipLevel], CubeMapLayer::POSITIVE_X + iSide, iMipLevel, 0u, 0u, side[iMipLevel].GetWidth(), side[iMipLevel].GetHeight());
}
}
-
- // If mipmap is not defined explicitly, use GenerateMipmaps.
- // TODO: Maybe we can use better way to know it already has mipmap or not.
- if(mPixelData.size() > 0u && mPixelData[0].size() == 1u)
- {
- mEnvironmentMapTexture.GenerateMipmaps();
- }
}
else
{
mEnvironmentMapTexture = Texture::New(TextureType::TEXTURE_2D, mPixelData[0][0].GetPixelFormat(), mPixelData[0][0].GetWidth(), mPixelData[0][0].GetHeight());
mEnvironmentMapTexture.Upload(mPixelData[0][0], 0, 0, 0, 0, mPixelData[0][0].GetWidth(), mPixelData[0][0].GetHeight());
}
+
+ // If mipmap is not defined explicitly, use GenerateMipmaps.
+ // TODO: Maybe we can use better way to know it already has mipmap or not.
+ if(mPixelData.size() > 0u && mPixelData[0].size() == 1u)
+ {
+ mEnvironmentMapTexture.GenerateMipmaps();
+ }
}
return mEnvironmentMapTexture;
}
{
environmentMapData.mPixelData[i][0] = GetCubeFace(pixelBuffer, i, cubeType, faceWidth, faceHeight);
}
- uint32_t mipmap = static_cast<uint32_t>(1 + std::floor(std::log2(std::max(environmentMapData.mPixelData[0][0].GetWidth(), environmentMapData.mPixelData[0][0].GetHeight()))));
- environmentMapData.SetMipmapLevels(mipmap);
environmentMapData.SetEnvironmentMapType(Scene3D::EnvironmentMapType::CUBEMAP);
}
else
environmentMapData.mPixelData[0][0] = Devel::PixelBuffer::Convert(pixelBuffer);
environmentMapData.SetEnvironmentMapType(Scene3D::EnvironmentMapType::EQUIRECTANGULAR);
}
+
+ if(!environmentMapData.mPixelData.empty() && !environmentMapData.mPixelData[0].empty() && environmentMapData.mPixelData[0][0])
+ {
+ const uint32_t pixelDataWidth = environmentMapData.mPixelData[0][0].GetWidth();
+ const uint32_t pixelDataHeight = environmentMapData.mPixelData[0][0].GetHeight();
+
+ if(pixelDataWidth > 0u && pixelDataHeight > 0u)
+ {
+ uint32_t mipmap = static_cast<uint32_t>(1 + std::floor(std::log2(std::min(pixelDataWidth, pixelDataHeight))));
+ environmentMapData.SetMipmapLevels(mipmap);
+ }
+ }
return true;
}
return false;