~ubuntu-branches/ubuntu/quantal/mesa/quantal

« back to all changes in this revision

Viewing changes to src/mesa/main/texstate.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2007-02-21 12:44:07 UTC
  • mfrom: (1.2.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 22.
  • Revision ID: james.westby@ubuntu.com-20070221124407-rgcacs32mycrtadl
ImportĀ upstreamĀ versionĀ 6.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
144
144
      dst->Texture.Unit[i].Combine.ScaleShiftA = src->Texture.Unit[i].Combine.ScaleShiftA;
145
145
 
146
146
      /* copy texture object bindings, not contents of texture objects */
 
147
      _mesa_lock_context_textures(dst);
 
148
 
147
149
      copy_texture_binding(src, &dst->Texture.Unit[i].Current1D,
148
150
                           src->Texture.Unit[i].Current1D);
149
151
      copy_texture_binding(src, &dst->Texture.Unit[i].Current2D,
154
156
                           src->Texture.Unit[i].CurrentCubeMap);
155
157
      copy_texture_binding(src, &dst->Texture.Unit[i].CurrentRect,
156
158
                           src->Texture.Unit[i].CurrentRect);
 
159
 
 
160
      _mesa_unlock_context_textures(dst);
157
161
   }
158
162
}
159
163
 
1700
1704
                              GLenum pname, GLint *params )
1701
1705
{
1702
1706
   const struct gl_texture_unit *texUnit;
 
1707
   struct gl_texture_object *texObj;
1703
1708
   const struct gl_texture_image *img = NULL;
1704
1709
   GLuint dimensions;
1705
1710
   GLboolean isProxy;
1734
1739
      return;
1735
1740
   }
1736
1741
 
1737
 
   img = _mesa_select_tex_image(ctx, texUnit, target, level);
 
1742
   texObj = _mesa_select_tex_object(ctx, texUnit, target);
 
1743
   _mesa_lock_texture(ctx, texObj);
 
1744
 
 
1745
   img = _mesa_select_tex_image(ctx, texObj, target, level);
1738
1746
   if (!img || !img->TexFormat) {
1739
1747
      /* undefined texture image */
1740
1748
      if (pname == GL_TEXTURE_COMPONENTS)
1741
1749
         *params = 1;
1742
1750
      else
1743
1751
         *params = 0;
1744
 
      return;
 
1752
      goto out;
1745
1753
   }
1746
1754
 
1747
1755
   isProxy = _mesa_is_proxy_texture(target);
1749
1757
   switch (pname) {
1750
1758
      case GL_TEXTURE_WIDTH:
1751
1759
         *params = img->Width;
1752
 
         return;
 
1760
         break;
1753
1761
      case GL_TEXTURE_HEIGHT:
1754
1762
         *params = img->Height;
1755
 
         return;
 
1763
         break;
1756
1764
      case GL_TEXTURE_DEPTH:
1757
1765
         *params = img->Depth;
1758
 
         return;
 
1766
         break;
1759
1767
      case GL_TEXTURE_INTERNAL_FORMAT:
1760
1768
         *params = img->InternalFormat;
1761
 
         return;
 
1769
         break;
1762
1770
      case GL_TEXTURE_BORDER:
1763
1771
         *params = img->Border;
1764
 
         return;
 
1772
         break;
1765
1773
      case GL_TEXTURE_RED_SIZE:
1766
1774
         if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA)
1767
1775
            *params = img->TexFormat->RedBits;
1768
1776
         else
1769
1777
            *params = 0;
1770
 
         return;
 
1778
         break;
1771
1779
      case GL_TEXTURE_GREEN_SIZE:
1772
1780
         if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA)
1773
1781
            *params = img->TexFormat->GreenBits;
1774
1782
         else
1775
1783
            *params = 0;
1776
 
         return;
 
1784
         break;
1777
1785
      case GL_TEXTURE_BLUE_SIZE:
1778
1786
         if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA)
1779
1787
            *params = img->TexFormat->BlueBits;
1780
1788
         else
1781
1789
            *params = 0;
1782
 
         return;
 
1790
         break;
1783
1791
      case GL_TEXTURE_ALPHA_SIZE:
1784
1792
         if (img->_BaseFormat == GL_ALPHA ||
1785
1793
             img->_BaseFormat == GL_LUMINANCE_ALPHA ||
1787
1795
            *params = img->TexFormat->AlphaBits;
1788
1796
         else
1789
1797
            *params = 0;
1790
 
         return;
 
1798
         break;
1791
1799
      case GL_TEXTURE_INTENSITY_SIZE:
1792
1800
         if (img->_BaseFormat != GL_INTENSITY)
1793
1801
            *params = 0;
1795
1803
            *params = img->TexFormat->IntensityBits;
1796
1804
         else /* intensity probably stored as rgb texture */
1797
1805
            *params = MIN2(img->TexFormat->RedBits, img->TexFormat->GreenBits);
1798
 
         return;
 
1806
         break;
1799
1807
      case GL_TEXTURE_LUMINANCE_SIZE:
1800
1808
         if (img->_BaseFormat != GL_LUMINANCE &&
1801
1809
             img->_BaseFormat != GL_LUMINANCE_ALPHA)
1804
1812
            *params = img->TexFormat->LuminanceBits;
1805
1813
         else /* luminance probably stored as rgb texture */
1806
1814
            *params = MIN2(img->TexFormat->RedBits, img->TexFormat->GreenBits);
1807
 
         return;
 
1815
         break;
1808
1816
      case GL_TEXTURE_INDEX_SIZE_EXT:
1809
1817
         if (img->_BaseFormat == GL_COLOR_INDEX)
1810
1818
            *params = img->TexFormat->IndexBits;
1811
1819
         else
1812
1820
            *params = 0;
1813
 
         return;
 
1821
         break;
1814
1822
      case GL_TEXTURE_DEPTH_SIZE_ARB:
1815
1823
         if (ctx->Extensions.SGIX_depth_texture ||
1816
1824
             ctx->Extensions.ARB_depth_texture)
1818
1826
         else
1819
1827
            _mesa_error(ctx, GL_INVALID_ENUM,
1820
1828
                        "glGetTexLevelParameter[if]v(pname)");
1821
 
         return;
 
1829
         break;
1822
1830
      case GL_TEXTURE_STENCIL_SIZE_EXT:
1823
1831
         if (ctx->Extensions.EXT_packed_depth_stencil) {
1824
1832
            *params = img->TexFormat->StencilBits;
1827
1835
            _mesa_error(ctx, GL_INVALID_ENUM,
1828
1836
                        "glGetTexLevelParameter[if]v(pname)");
1829
1837
         }
1830
 
         return;
 
1838
         break;
1831
1839
 
1832
1840
      /* GL_ARB_texture_compression */
1833
1841
      case GL_TEXTURE_COMPRESSED_IMAGE_SIZE:
1849
1857
            _mesa_error(ctx, GL_INVALID_ENUM,
1850
1858
                        "glGetTexLevelParameter[if]v(pname)");
1851
1859
         }
1852
 
         return;
 
1860
         break;
1853
1861
      case GL_TEXTURE_COMPRESSED:
1854
1862
         if (ctx->Extensions.ARB_texture_compression) {
1855
1863
            *params = (GLint) img->IsCompressed;
1858
1866
            _mesa_error(ctx, GL_INVALID_ENUM,
1859
1867
                        "glGetTexLevelParameter[if]v(pname)");
1860
1868
         }
1861
 
         return;
 
1869
         break;
1862
1870
 
1863
1871
      /* GL_ARB_texture_float */
1864
1872
      case GL_TEXTURE_RED_TYPE_ARB:
1869
1877
            _mesa_error(ctx, GL_INVALID_ENUM,
1870
1878
                        "glGetTexLevelParameter[if]v(pname)");
1871
1879
         }
1872
 
         return;
 
1880
         break;
1873
1881
      case GL_TEXTURE_GREEN_TYPE_ARB:
1874
1882
         if (ctx->Extensions.ARB_texture_float) {
1875
1883
            *params = img->TexFormat->GreenBits ? img->TexFormat->DataType : GL_NONE;
1878
1886
            _mesa_error(ctx, GL_INVALID_ENUM,
1879
1887
                        "glGetTexLevelParameter[if]v(pname)");
1880
1888
         }
1881
 
         return;
 
1889
         break;
1882
1890
      case GL_TEXTURE_BLUE_TYPE_ARB:
1883
1891
         if (ctx->Extensions.ARB_texture_float) {
1884
1892
            *params = img->TexFormat->BlueBits ? img->TexFormat->DataType : GL_NONE;
1887
1895
            _mesa_error(ctx, GL_INVALID_ENUM,
1888
1896
                        "glGetTexLevelParameter[if]v(pname)");
1889
1897
         }
1890
 
         return;
 
1898
         break;
1891
1899
      case GL_TEXTURE_ALPHA_TYPE_ARB:
1892
1900
         if (ctx->Extensions.ARB_texture_float) {
1893
1901
            *params = img->TexFormat->AlphaBits ? img->TexFormat->DataType : GL_NONE;
1896
1904
            _mesa_error(ctx, GL_INVALID_ENUM,
1897
1905
                        "glGetTexLevelParameter[if]v(pname)");
1898
1906
         }
1899
 
         return;
 
1907
         break;
1900
1908
      case GL_TEXTURE_LUMINANCE_TYPE_ARB:
1901
1909
         if (ctx->Extensions.ARB_texture_float) {
1902
1910
            *params = img->TexFormat->LuminanceBits ? img->TexFormat->DataType : GL_NONE;
1905
1913
            _mesa_error(ctx, GL_INVALID_ENUM,
1906
1914
                        "glGetTexLevelParameter[if]v(pname)");
1907
1915
         }
1908
 
         return;
 
1916
         break;
1909
1917
      case GL_TEXTURE_INTENSITY_TYPE_ARB:
1910
1918
         if (ctx->Extensions.ARB_texture_float) {
1911
1919
            *params = img->TexFormat->IntensityBits ? img->TexFormat->DataType : GL_NONE;
1914
1922
            _mesa_error(ctx, GL_INVALID_ENUM,
1915
1923
                        "glGetTexLevelParameter[if]v(pname)");
1916
1924
         }
1917
 
         return;
 
1925
         break;
1918
1926
      case GL_TEXTURE_DEPTH_TYPE_ARB:
1919
1927
         if (ctx->Extensions.ARB_texture_float) {
1920
1928
            *params = img->TexFormat->DepthBits ? img->TexFormat->DataType : GL_NONE;
1923
1931
            _mesa_error(ctx, GL_INVALID_ENUM,
1924
1932
                        "glGetTexLevelParameter[if]v(pname)");
1925
1933
         }
1926
 
         return;
 
1934
         break;
1927
1935
 
1928
1936
      default:
1929
1937
         _mesa_error(ctx, GL_INVALID_ENUM,
1930
1938
                     "glGetTexLevelParameter[if]v(pname)");
1931
1939
   }
 
1940
 
 
1941
 out:
 
1942
   _mesa_unlock_texture(ctx, texObj);
1932
1943
}
1933
1944
 
1934
1945
 
1938
1949
{
1939
1950
   struct gl_texture_unit *texUnit;
1940
1951
   struct gl_texture_object *obj;
 
1952
   GLboolean error = GL_FALSE;
1941
1953
   GET_CURRENT_CONTEXT(ctx);
1942
1954
   ASSERT_OUTSIDE_BEGIN_END(ctx);
1943
1955
 
1955
1967
      return;
1956
1968
   }
1957
1969
 
 
1970
   _mesa_lock_texture(ctx, obj);
1958
1971
   switch (pname) {
1959
1972
      case GL_TEXTURE_MAG_FILTER:
1960
1973
         *params = ENUM_TO_FLOAT(obj->MagFilter);
1961
 
         return;
 
1974
         break;
1962
1975
      case GL_TEXTURE_MIN_FILTER:
1963
1976
         *params = ENUM_TO_FLOAT(obj->MinFilter);
1964
 
         return;
 
1977
         break;
1965
1978
      case GL_TEXTURE_WRAP_S:
1966
1979
         *params = ENUM_TO_FLOAT(obj->WrapS);
1967
 
         return;
 
1980
         break;
1968
1981
      case GL_TEXTURE_WRAP_T:
1969
1982
         *params = ENUM_TO_FLOAT(obj->WrapT);
1970
 
         return;
 
1983
         break;
1971
1984
      case GL_TEXTURE_WRAP_R:
1972
1985
         *params = ENUM_TO_FLOAT(obj->WrapR);
1973
 
         return;
 
1986
         break;
1974
1987
      case GL_TEXTURE_BORDER_COLOR:
1975
1988
         params[0] = CLAMP(obj->BorderColor[0], 0.0F, 1.0F);
1976
1989
         params[1] = CLAMP(obj->BorderColor[1], 0.0F, 1.0F);
1977
1990
         params[2] = CLAMP(obj->BorderColor[2], 0.0F, 1.0F);
1978
1991
         params[3] = CLAMP(obj->BorderColor[3], 0.0F, 1.0F);
1979
 
         return;
 
1992
         break;
1980
1993
      case GL_TEXTURE_RESIDENT:
1981
1994
         {
1982
1995
            GLboolean resident;
1986
1999
               resident = GL_TRUE;
1987
2000
            *params = ENUM_TO_FLOAT(resident);
1988
2001
         }
1989
 
         return;
 
2002
         break;
1990
2003
      case GL_TEXTURE_PRIORITY:
1991
2004
         *params = obj->Priority;
1992
 
         return;
 
2005
         break;
1993
2006
      case GL_TEXTURE_MIN_LOD:
1994
2007
         *params = obj->MinLod;
1995
 
         return;
 
2008
         break;
1996
2009
      case GL_TEXTURE_MAX_LOD:
1997
2010
         *params = obj->MaxLod;
1998
 
         return;
 
2011
         break;
1999
2012
      case GL_TEXTURE_BASE_LEVEL:
2000
2013
         *params = (GLfloat) obj->BaseLevel;
2001
 
         return;
 
2014
         break;
2002
2015
      case GL_TEXTURE_MAX_LEVEL:
2003
2016
         *params = (GLfloat) obj->MaxLevel;
2004
 
         return;
 
2017
         break;
2005
2018
      case GL_TEXTURE_MAX_ANISOTROPY_EXT:
2006
2019
         if (ctx->Extensions.EXT_texture_filter_anisotropic) {
2007
2020
            *params = obj->MaxAnisotropy;
2008
 
            return;
2009
2021
         }
 
2022
         else
 
2023
            error = 1;
2010
2024
         break;
2011
2025
      case GL_TEXTURE_COMPARE_SGIX:
2012
2026
         if (ctx->Extensions.SGIX_shadow) {
2013
2027
            *params = (GLfloat) obj->CompareFlag;
2014
 
            return;
2015
2028
         }
 
2029
         else 
 
2030
            error = 1;
2016
2031
         break;
2017
2032
      case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
2018
2033
         if (ctx->Extensions.SGIX_shadow) {
2019
2034
            *params = (GLfloat) obj->CompareOperator;
2020
 
            return;
2021
2035
         }
 
2036
         else 
 
2037
            error = 1;
2022
2038
         break;
2023
2039
      case GL_SHADOW_AMBIENT_SGIX: /* aka GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
2024
2040
         if (ctx->Extensions.SGIX_shadow_ambient) {
2025
2041
            *params = obj->ShadowAmbient;
2026
 
            return;
2027
2042
         }
 
2043
         else 
 
2044
            error = 1;
2028
2045
         break;
2029
2046
      case GL_GENERATE_MIPMAP_SGIS:
2030
2047
         if (ctx->Extensions.SGIS_generate_mipmap) {
2031
2048
            *params = (GLfloat) obj->GenerateMipmap;
2032
 
            return;
2033
2049
         }
 
2050
         else 
 
2051
            error = 1;
2034
2052
         break;
2035
2053
      case GL_TEXTURE_COMPARE_MODE_ARB:
2036
2054
         if (ctx->Extensions.ARB_shadow) {
2037
2055
            *params = (GLfloat) obj->CompareMode;
2038
 
            return;
2039
2056
         }
 
2057
         else 
 
2058
            error = 1;
2040
2059
         break;
2041
2060
      case GL_TEXTURE_COMPARE_FUNC_ARB:
2042
2061
         if (ctx->Extensions.ARB_shadow) {
2043
2062
            *params = (GLfloat) obj->CompareFunc;
2044
 
            return;
2045
2063
         }
 
2064
         else 
 
2065
            error = 1;
2046
2066
         break;
2047
2067
      case GL_DEPTH_TEXTURE_MODE_ARB:
2048
2068
         if (ctx->Extensions.ARB_depth_texture) {
2049
2069
            *params = (GLfloat) obj->DepthMode;
2050
 
            return;
2051
2070
         }
 
2071
         else 
 
2072
            error = 1;
2052
2073
         break;
2053
2074
      case GL_TEXTURE_LOD_BIAS:
2054
2075
         if (ctx->Extensions.EXT_texture_lod_bias) {
2055
2076
            *params = obj->LodBias;
2056
 
            return;
2057
2077
         }
 
2078
         else 
 
2079
            error = 1;
2058
2080
         break;
2059
2081
      default:
2060
 
         ; /* silence warnings */
 
2082
         error = 1;
 
2083
         break;
2061
2084
   }
2062
 
   /* If we get here, pname was an unrecognized enum */
2063
 
   _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)",
2064
 
               pname);
 
2085
   if (error)
 
2086
      _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)",
 
2087
                  pname);
 
2088
 
 
2089
   _mesa_unlock_texture(ctx, obj);
2065
2090
}
2066
2091
 
2067
2092