| 1940 | } |
| 1941 | |
| 1942 | s32 parse_render_states(const char *json) |
| 1943 | { |
| 1944 | TempAllocator4096 ta; |
| 1945 | JsonObject render_states(ta); |
| 1946 | RETURN_IF_ERROR(sjson::parse_object(render_states, json)); |
| 1947 | |
| 1948 | auto cur = json_object::begin(render_states); |
| 1949 | auto end = json_object::end(render_states); |
| 1950 | for (; cur != end; ++cur) { |
| 1951 | JSON_OBJECT_SKIP_HOLE(render_states, cur); |
| 1952 | |
| 1953 | JsonObject obj(ta); |
| 1954 | RETURN_IF_ERROR(sjson::parse_object(obj, cur->second)); |
| 1955 | |
| 1956 | RenderState rs(default_allocator()); |
| 1957 | s32 err = parse_render_state(rs, cur->second); |
| 1958 | ENSURE_OR_RETURN(SHADER_RESOURCE, err == 0, _opts); |
| 1959 | |
| 1960 | DynamicString key(ta); |
| 1961 | key = cur->first; |
| 1962 | |
| 1963 | RETURN_IF_FALSE(SHADER_RESOURCE, !hash_map::has(_render_states, key) |
| 1964 | , _opts |
| 1965 | , "Render state redefined: '%s'" |
| 1966 | , key.c_str() |
| 1967 | ); |
| 1968 | hash_map::set(_render_states, key, rs); |
| 1969 | } |
| 1970 | |
| 1971 | return 0; |
| 1972 | } |
| 1973 | |
| 1974 | s32 parse_sampler_states(const char *json) |
| 1975 | { |